§
    «³ÙgÐ2 ã                   óv  — d dl mZ d dlmZ d dlmZ d dlmZ d dl	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 ddlmZ ddlmZmZ ddlmZmZ ddlmZ ddlmZ ddlm Z  ddl!m"Z" d dl#m$Z$  G d„ d¦  «        Z%d„ Z&d„ Z' G d„ dee¦  «        Z( ed¦  «        Z)d"d„Z*d#d„Z+d„ Z,ddl-m.Z. dd l/m0Z0 dd!l1m2Z2m3Z3 dS )$é    )ÚTuple)Ú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                   ó"   — e Zd ZdZdZdZdZdZdS )Ú	NC_MarkerFN)Ú__name__Ú
__module__Ú__qualname__Úis_OrderÚis_MulÚ	is_NumberÚis_PolyÚis_commutative© ó    úD/granary/edev/quantum/lib/python3.11/site-packages/sympy/core/mul.pyr   r      s'   € € € € € Ø€HØ€FØ€IØ€Gà€N€N€Nr$   r   c                 ó<   — |                       t          ¬¦  «         d S )N©Úkey)Úsortr
   ©Úargss    r%   Ú_mulsortr,       s   € à‡I‚I•-€IÑ Ô Ð Ð Ð r$   c                  ór  — t          | ¦  «        } g }g }t          j        }| r›|                      ¦   «         }|j        r\|                     ¦   «         \  }}|                      |¦  «         |r-|                     t           	                    |¦  «        ¦  «         n"|j
        r||z  }n|                     |¦  «         | °›t          |¦  «         |t          j        ur|                     d|¦  «         |r-|                     t           	                    |¦  «        ¦  «         t           	                    |¦  «        S )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   ÚOneÚpopr   Úargs_cncÚextendÚappendÚMulÚ
_from_argsr    r,   Úinsert)r+   ÚnewargsÚncargsÚcoÚaÚcÚncs          r%   Ú_unevaluated_Mulr=   %   s  € õ> �‰:Œ:€DØ€GØ€FÝ	
Œ€BØ
ð 
Ø�HŠH‰JŒJˆØŒ8ð 	Ø—J’J‘L”L‰EˆAˆrØ�KŠK˜‰NŒNˆNØð 2Ø—’�cŸnšn¨RÑ0Ô0Ñ1Ô1Ð1øØŒ[ð 	Ø�!‰GˆBˆBà�NŠN˜1ÑÔÐð ð 
õ ˆWÑÔÐØ	•”€€Ø�Š�q˜"ÑÔÐØð /Ø�Š•s—~’~ fÑ-Ô-Ñ.Ô.Ð.Ý�>Š>˜'Ñ"Ô"Ð"r$   c                   ó  ‡ — e Zd ZU dZdZeedf         ed<   dZeZ	 e
dd¬¦  «        Zed„ ¦   «         Zd	„ Zd
„ Zed„ ¦   «         Zd„ Zed„ ¦   «         Zd„ Zed„ ¦   «         Zed„ ¦   «         Zeddœd„¦   «         ZdLd„ZdMd„Zed„ ¦   «         Zd„ Zed„ ¦   «         Zeˆ fd„¦   «         Zd„ Z d„ Z!dNd„Z"ed„ ¦   «         Z#edOd„¦   «         Z$ed „ ¦   «         Z%ed!„ ¦   «         Z&ed"„ ¦   «         Z'ed#„ ¦   «         Z(ed$„ ¦   «         Z)d%„ Z*d&„ Z+d'„ Z,d(„ Z-d)„ Z.d*„ Z/d+„ Z0d,„ Z1d-„ Z2d.„ Z3d/„ Z4d0„ Z5d1„ Z6d2„ Z7d3„ Z8d4„ Z9d5„ Z:d6„ Z;d7„ Z<d8„ Z=d9„ Z>d:„ Z?d;„ Z@d<„ ZAd=„ ZBd>„ ZCd?„ ZDd@„ ZEdA„ ZFdB„ ZGdPdD„ZHdQdE„ZIdF„ ZJdG„ ZKdH„ ZLdRdI„ZMdOdJ„ZNedK„ ¦   «         ZOˆ xZPS )Sr4   aB  
    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#   .r+   TÚMul_kind_dispatcher)Úcommutativec                 ó8   — d„ | j         D ¦   «         } | j        |Ž S )Nc              3   ó$   K  — | ]}|j         V — Œd S ©N)Úkind©Ú.0r:   s     r%   ú	<genexpr>zMul.kind.<locals>.<genexpr>¬   s$   è è € Ð/Ð/ �Q”VÐ/Ð/Ð/Ð/Ð/Ð/r$   )r+   Ú_kind_dispatcher)ÚselfÚ	arg_kindss     r%   rD   zMul.kindª   s'   € à/Ð/ T¤YÐ/Ñ/Ô/ˆ	Ø$ˆtÔ$ iÐ0Ð0r$   c                 óJ   — | |  k    rdS | j         d         }|j        o|j        S )NFr   )r+   r    Úis_extended_negative)rI   r;   s     r%   Úcould_extract_minus_signzMul.could_extract_minus_sign¯   s-   € Ø�T�EŠ?ˆ?Ø�5ØŒI�aŒLˆØŒ{Ð5˜qÔ5Ð5r$   c                 óL  — |                       ¦   «         \  }}|d         t          j        ur| }|t          j        urN|d         j        r;t          |¦  «        }|t          j        u r|d          |d<   n|dxx         |z  cc<   n|f|z   }|                      || j        ¦  «        S ©Nr   )	Úas_coeff_mulr   ÚComplexInfinityr/   r    r.   ÚNegativeOner5   r"   )rI   r;   r+   s      r%   Ú__neg__zMul.__neg__´   s¬   € Ø×#Ò#Ñ%Ô%‰ˆˆ4Ø�Œ7�!Ô+Ð+Ð+Ø�ˆAØ•A”Eˆ>ˆ>Ø�AŒwÔ ð #Ý˜D‘z”z�Ø�œÐ%Ð%Ø# Aœw˜h�D˜‘G�Gà˜�G�G”G˜q‘L�G�G‘G�Gà�t˜d‘{�Ø�Š˜t TÔ%8Ñ9Ô9Ð9r$   c                 ó`  ‡1‡2‡3‡4— ddl m} ddlmŠ1 d}t	          |¦  «        dk    rÄ|\  Š2Š3‰3j        r	‰3‰2cŠ2Š3‰2‰3g}‰2t          j        usJ ‚‰2j        r”‰2j        s�‰3 	                    ¦   «         \  }Š3‰3j
        ro|t          j        ur.‰2|z  }|t          j        u r‰3}n | ‰2|z  ‰3d¬¦  «        }|gg df}n3t          j        r'‰3j        r t          ˆ2fd„‰3j        D ¦   «         Ž }|gg df}|r|S g }g }	g }
t          j        Š4g }g }t          j        }i }d}|D �]ˆ}|j        r|                     |¦  «        \  }}|j        ry|j        r|                     |j        ¦  «         nV|j        D ]4}|j        r|                     |¦  «         Œ|
                     |¦  «         Œ5|                     t,          ¦  «         Œ¢|j        rs|t          j        u s‰4t          j        u r|j        rt          j        gg dfc S ‰4j        st5          ‰4|¦  «        r%‰4|z  Š4‰4t          j        u rt          j        gg dfc S �Œt5          ||¦  «        r|                     ‰4¦  «        Š4�ŒC|t          j        u r"‰4st          j        gg dfc S t          j        Š4�Œs|t          j        u r|t          j        z  }�Œ’|j        rü|                     ¦   «         \  Š3}|j        rÅ‰3j        r¾|j        r�|j         r‰4tC          ‰3|¦  «        z  Š4�Œá|j"        r%|                     tC          ‰3|¦  «        ¦  «         �Œ‰3j"        r||z  }‰3 Š3‰3t          j        ur)| #                    ‰3g ¦  «                             |¦  «         �ŒU‰3j$        s|j%        r|                     ‰3|f¦  «         �Œ||                     ‰3|f¦  «         �Œ•|t,          ur|
                     |¦  «         |
rÓ|
 &                    d¦  «        }|	s|	                     |¦  «         Œ/|	 &                    ¦   «         }|                     ¦   «         \  }}|                     ¦   «         \  }}||z   }||k    r@|j
        s9||z  }|j        r|                     |¦  «         Œ¥|
 '                    d|¦  «         n|	                     ||g¦  «         |
°Ó�ŒŠd	„ } ||¦  «        } ||¦  «        }tQ          d¦  «        D �]G}g }d}|D �]\  Š3}|j        r_‰3j
        s‰3j        rPtS          ˆ3fd
„t          j        t          j*        t          j+        fD ¦   «         ¦  «        rt          j        gg dfc c S Œl|t          j        u r‰3j        r‰4‰3z  Š4Œ‡‰3}|t          j        ur?tC          ‰3|¦  «        }|j        r(‰3j        s!‰3}|                     ¦   «         \  Š3}‰3|k    rd}|                     |¦  «         |                     ‰3|f¦  «         �Œ|r9t	          d„ |D ¦   «         ¦  «        t	          |¦  «        k    rg } ||¦  «        }�ŒH i } |D ].\  Š3}|  #                    |g ¦  «                             ‰3¦  «         Œ/|  ,                    ¦   «         D ]\  }Š3 | ‰3Ž | |<   Œ|                     d„ |  ,                    ¦   «         D ¦   «         ¦  «         i }!| ,                    ¦   «         D ]5\  Š3}|! #                    t          |Ž g ¦  «                             ‰3¦  «         Œ6~g }"|! ,                    ¦   «         D ]•\  }Š3 | ‰3Ž Š3|j-        dk    r‰4tC          ‰3|¦  «        z  Š4Œ)|j.        |j-        k    rEt_          |j.        |j-        ¦  «        \  }#}$‰4tC          ‰3|#¦  «        z  Š4ta          |$|j-        ¦  «        }|"                     ‰3|f¦  «         Œ–~!tc          td          ¦  «        }%d}|t	          |"¦  «        k     �rÊ|"|         \  }}&|dk    r|dz  }Œ+g }'tQ          |dz   t	          |"¦  «        ¦  «        D ]ß}(|"|(         \  })}*| 3                    |)¦  «        }+|+t          j        ur¯|&|*z   }|j-        dk    r‰4tC          |+|¦  «        z  Š4nl|j.        |j-        k    rEt_          |j.        |j-        ¦  «        \  }#}$‰4tC          |+|#¦  «        z  Š4ta          |$|j-        ¦  «        }|'                     |+|f¦  «         |)|+z  |*f|"|(<   ||+z  }|t          j        u r nŒà|t          j        urutC          ||&¦  «        },|,j        r‰4|,z  Š4nXth           5                    |,¦  «        D ]=},|,j        r‰4|,z  Š4Œ|,j        sJ ‚|,j        \  }}&|%|&                              |¦  «         Œ>|"                     |'¦  «         |dz  }|t	          |"¦  «        k     �°Ê|% ,                    ¦   «         D ]\  }Š3 | ‰3Ž |%|<   Œ|rÈ| 6                    ¦   «         \  }}t_          ||¦  «        \  }-}|-dz  r‰4 Š4|dk    r |                     t          j        ¦  «         np|rnta          ||¦  «        }|% ,                    ¦   «         D ]\  }Š3||k    r‰3j$        r‰3 |%|<    n0Œ|                     tC          t          j7        |d¬¦  «        ¦  «         |                     d„ |% ,                    ¦   «         D ¦   «         ¦  «         ‰4t          j*        t          j+        fv r&d„ }. |.|d¦  «        \  }}/ |.|	|/¦  «        \  }	}/‰4|/z  Š4‰4t          j        u rd„ |D ¦   «         }d„ |	D ¦   «         }	nW‰4j        rPtS          ˆ1fd„|	D ¦   «         ¦  «        r‰4g|	|fS tS          d„ |D ¦   «         ¦  «        rt          j        gg |fS ‰4gg |fS g }0|D ]$}|j        r‰4|z  Š4Œ|0                     |¦  «         Œ%|0}tq          |¦  «         ‰4t          j        ur| '                    d‰4¦  «         t          j        re|	sct	          |¦  «        dk    rP|d         j        rC|d         j9        r6|d         j
        r)|d         Š4t          ˆ4fd„|d         j        D ¦   «         Ž g}||	|fS )a.  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é   F©Úevaluatec                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r#   ©Ú_keep_coeff)rF   Úbir:   s     €r%   ú
<listcomp>zMul.flatten.<locals>.<listcomp>'  s#   ø€ Ð$IÐ$IÐ$I¸B¥[°°BÑ%7Ô%7Ð$IÐ$IÐ$Ir$   c                 óô  ‡— i }| D ]b\  Š}|                      ¦   «         }|                     ‰i ¦  «                             |d         g ¦  «                             |d         ¦  «         Œc|                     ¦   «         D ]+\  Š}|                     ¦   «         D ]\  }}t	          |Ž ||<   ŒŒ,g }|                     ¦   «         D ]8\  Š}|                     ˆfd„|                     ¦   «         D ¦   «         ¦  «         Œ9|S )Nr   r   c                 ó$   •— g | ]\  }}‰||z  f‘ŒS r#   r#   )rF   Útr;   Úbs      €r%   r^   z0Mul.flatten.<locals>._gather.<locals>.<listcomp>Ü  s%   ø€ Ð$DÐ$DÐ$D±$°!°Q a¨¨1© XÐ$DÐ$DÐ$Dr$   )Úas_coeff_MulÚ
setdefaultr3   ÚitemsÚAddr2   )	Úc_powersÚcommon_bÚer9   ÚdÚdiÚliÚnew_c_powersrb   s	           @r%   Ú_gatherzMul.flatten.<locals>._gatherÑ  s  ø€ ØˆHØ ð -ð -‘��1Ø—^’^Ñ%Ô%�Ø×#Ò# A rÑ*Ô*×5Ò5Ø�q”E˜2ñô ß%šv b¨¤e™}œ}˜}˜}Ø ŸšÑ(Ô(ð %ð %‘��1ØŸgšg™iœið %ð %‘F�B˜Ý ˜H�A�b‘E�Eð%àˆLØ ŸšÑ(Ô(ð Fð F‘��1Ø×#Ò#Ð$DÐ$DÐ$DÐ$D¸!¿'º'¹)¼)Ð$DÑ$DÔ$DÑEÔEÐEÐEØÐr$   c              3   ó*   •K  — | ]}|‰j         v V — Œd S rC   r*   )rF   Úinftyrb   s     €r%   rG   zMul.flatten.<locals>.<genexpr>  s=   øè è € ð 6;ð 6;Ø!ð 7<¸q¼v°oð 6;ð 6;ð 6;ð 6;ð 6;ð 6;r$   Tc                 ó   — h | ]\  }}|’ŒS r#   r#   ©rF   rb   ri   s      r%   ú	<setcomp>zMul.flatten.<locals>.<setcomp>  s)   € ð  0ð  0ð  0Ù˜!˜Q�Að 0ð  0ð  0r$   c                 ó8   — g | ]\  }}|¯t          ||¦  «        ‘ŒS r#   ©ÚPow©rF   ri   rb   s      r%   r^   zMul.flatten.<locals>.<listcomp>)  s)   € ÐGÐGÐG¡T Q¨ÀQÐG•s˜1˜a‘y”yÐGÐGÐGr$   r   c                 ó4   — g | ]\  }}t          ||¦  «        ‘ŒS r#   ru   rw   s      r%   r^   zMul.flatten.<locals>.<listcomp>Ž  s$   € Ð:Ð:Ð:¡T Q¨•s˜1˜a‘y”yÐ:Ð:Ð:r$   c                 ól   — g }| D ],}|j         rŒ
|j        r|dz  }Œ|                     |¦  «         Œ-||fS ©Néÿÿÿÿ)Úis_extended_positiverL   r3   )Úc_partÚ
coeff_signÚ
new_c_partra   s       r%   Ú_handle_for_ooz#Mul.flatten.<locals>._handle_for_oo’  s^   € Ø�
Øð )ð )�AØÔ-ð !Ø ØÔ-ð !Ø" bÑ(˜
Ø Ø×%Ò% aÑ(Ô(Ð(Ð(Ø! :Ð-Ð-r$   c                 óH   — g | ]}t          |j        ¦  «        r|j        ­|‘Œ S rC   ©r   Úis_zeroÚis_extended_real©rF   r;   s     r%   r^   zMul.flatten.<locals>.<listcomp>§  s?   € ð Qð Qð Q˜Aµ	¸!¼)Ñ0DÔ0Dð QØ01Ô0BÐ0Nð Ø0NÐ0NÐ0Nr$   c                 óH   — g | ]}t          |j        ¦  «        r|j        ­|‘Œ S rC   r‚   r…   s     r%   r^   zMul.flatten.<locals>.<listcomp>©  s?   € ð Sð Sð S˜Qµ)¸A¼IÑ2FÔ2Fð SØ23Ô2DÐ2Pð Ø2PÐ2PÐ2Pr$   c              3   ó8   •K  — | ]}t          |‰¦  «        V — Œd S rC   )Ú
isinstance)rF   r;   rV   s     €r%   rG   zMul.flatten.<locals>.<genexpr>°  s-   øè è € Ð>Ð>°•:˜a Ñ,Ô,Ð>Ð>Ð>Ð>Ð>Ð>r$   c              3   ó,   K  — | ]}|j         d k    V — ŒdS ©FN©Ú	is_finiter…   s     r%   rG   zMul.flatten.<locals>.<genexpr>²  s)   è è € Ð8Ð8¨A�1”; %Ò'Ð8Ð8Ð8Ð8Ð8Ð8r$   c                 ó   •— g | ]}‰|z  ‘ŒS r#   r#   )rF   ÚfÚcoeffs     €r%   r^   zMul.flatten.<locals>.<listcomp>Ë  s   ø€ Ð<Ð<Ð<¨˜E !™GÐ<Ð<Ð<r$   ):Ú!sympy.calculus.accumulationboundsrU   Úsympy.matrices.expressionsrV   ÚlenÚis_Rationalr   r/   rƒ   rc   Úis_Addr   Ú
distributer"   rf   r+   ÚZeror   Úas_expr_variablesr   r2   r3   r   r    ÚNaNrQ   rˆ   Ú__mul__ÚImaginaryUnitÚHalfÚas_base_expÚis_PowÚ
is_Integerrv   Úis_negativerd   Úis_positiveÚ
is_integerr0   r6   ÚrangeÚanyÚInfinityÚNegativeInfinityre   ÚqÚpÚdivmodÚRationalr   r.   Úgcdr4   Ú	make_argsÚas_numer_denomrR   r,   rŒ   )5ÚclsÚseqrU   ÚrvÚrÚarÚarbÚnewbr}   Únc_partÚnc_seqrg   Únum_expÚneg1eÚpnum_ratÚorder_symbolsÚor¦   ri   Úo1Úb1Úe1Úb2Úe2Únew_expÚo12rn   Úirm   Úchangedr§   r]   Úinv_exp_dictÚcomb_eÚnum_ratÚe_iÚepÚpnewÚeiÚgrowÚjÚbjÚejÚgÚobjÚnr€   r~   Ú_newrV   r:   rb   r�   s5                                                    @@@@r%   ÚflattenzMul.flattenÃ   sx  øøøø€ ð^ 	BÐAÐAÐAÐAÐAØ9Ð9Ð9Ð9Ð9Ð9ØˆÝˆs‰8Œ8�qŠ=ˆ=Ø‰DˆAˆqØŒ}ð Ø˜!���1Ø˜!�f�Ø�AœE�>�>�>�>ØŒ}ð . Q¤Yð .Ø—~’~Ñ'Ô'‘��1Ø”8ð .Ø¥¤�~�~à˜q™S˜Ø¥¤˜;˜;Ø"#˜C˜Cà"% # a¨¡c¨1°uÐ"=Ñ"=Ô"=˜CØ!˜U B¨˜_˜˜Ý*Ô5ð .¸!Ô:Jð .Ý"Ð$IÐ$IÐ$IÐ$IÀ!Ä&Ð$IÑ$IÔ$IÐJ˜Ø"˜V R¨Ð-˜Øð Ø�	ð ˆØˆàˆå”ˆð ˆð ˆõ ”ˆàˆð ˆð ð u	0ñ u	0ˆAàŒzð FØ#$×#6Ò#6°}Ñ#EÔ#EÑ ��=ð Œxð o0ØÔ#ð *Ø—J’J˜qœvÑ&Ô&Ð&Ð&ð œVð -ð -˜ØÔ+ð -ØŸJšJ q™MœM˜M˜Mà"ŸMšM¨!Ñ,Ô,Ð,Ð,ð —J’J�yÑ)Ô)Ð)àð ”ð \0Ø�œ�:�: ­!Ô*;Ð!;Ð!;ÀÄ	Ð!;åœE˜7 B¨Ð,Ð,Ð,Ð,Ø”_ð 1­
°5¸+Ñ(FÔ(Fð 1Ø˜Q‘J�EØ¥¤�~�~å !¤˜w¨¨DÐ0Ð0Ð0Ð0Ùå˜A˜{Ñ+Ô+ð Q0ØŸ	š	 %Ñ(Ô(�Ùà•aÔ'Ð'Ð'Øð -åœE˜7 B¨Ð,Ð,Ð,Ð,ÝÔ)�Ùà•a”oÐ%Ð%Ø�œ‘�ÙàÔ!ð B0ð —}’}‘”‘��1ð ”8ð %Ø”{ð %ð
 œ=ð %Ø œ|ð 'Ø %­¨Q°©¬Ñ 2 Ù (Ø!"¤ð 'Ø #§
¢
­3¨q°!©9¬9Ñ 5Ô 5Ð 5Ù (Ø!"¤ð 'Ø %¨¡
 Ø%& B Ø ­¬˜~˜~Ø (× 3Ò 3°A°rÑ :Ô :× AÒ AÀ!Ñ DÔ DÐ DÙ$Øœ]ð %¨a¬lð %Ø#ŸNšN¨A¨q¨6Ñ2Ô2Ð2Ù$à—’  A Ñ'Ô'Ð'Ñ'ð
 �IÐ%Ð%Ø—M’M !Ñ$Ô$Ð$ð ð 0ØŸ
š
 1™œ�AØ"ð !ØŸš qÑ)Ô)Ð)Ø ð !Ÿš™œ�BØŸ^š^Ñ-Ô-‘F�B˜ØŸ]š]™_œ_‘F�B˜Ø  2™g�Gð
 ˜R’x�x¨¬�xØ  G™m˜ð Ô-ð 2ØŸJšJ s™OœO˜OØ$à"ŸMšM¨!¨SÑ1Ô1Ð1Ð1ð  Ÿš¨¨A wÑ/Ô/Ð/ð7 ð 0ùðT	 ð 	 ð 	 ð �7˜8Ñ$Ô$ˆð �'˜'Ñ"Ô"ˆõ0 �q‘”ð $	ñ $	ˆAØˆLØˆGØ ð ,ñ ,‘��1Ø”9ð àœð 1 A¤Hð 1µ#ð 6;ð 6;ð 6;ð 6;Ý&'Ô&7½¼Ý&'Ô&8ð&:ð6;ñ 6;ô 6;ñ 3;ô 3;ð 1õ !"¤˜w¨¨DÐ0Ð0Ð0Ð0Ð0Ð0ØØ�œ�:�:Ø”{ð !Ø ™
˜Ø Ø�AØ�AœE�>�>Ý˜A˜q™	œ	�Að ”xð +¨¬ð +Ø˜Ø Ÿ}š}™œ™˜˜1Ø š7˜7Ø&*˜GØ—’˜aÑ Ô Ð Ø×#Ò# Q¨ FÑ+Ô+Ð+Ñ+ð ð �3ð  0ð  0Ø".ð 0ñ  0ô  0ñ 1ô 1Ý47¸Ñ4EÔ4EòFð Fð �Ø"˜7 <Ñ0Ô0�‘àð ˆàð 	5ð 	5‰DˆAˆqØ×#Ò# A rÑ*Ô*×1Ò1°!Ñ4Ô4Ð4Ð4Ø ×&Ò&Ñ(Ô(ð 	&ð 	&‰DˆAˆqØ!˜c 1˜gˆL˜‰OˆOØ�ŠÐGÐG¨\×-?Ò-?Ñ-AÔ-AÐGÑGÔGÑHÔHÐHð ˆØ—N’NÑ$Ô$ð 	5ð 	5‰DˆAˆqØ×Ò�c 1˜g rÑ*Ô*×1Ò1°!Ñ4Ô4Ð4Ð4Øð ˆØ—L’L‘N”Nð 		#ð 		#‰DˆAˆqØ��Q�ˆAØŒs�aŠxˆxØ�˜Q ™œÑ"�ØØŒs�Q”SŠyˆyÝ  ¤ a¤cÑ*Ô*‘��RØ�˜Q ™œÑ$�Ý˜R ¤Ñ%Ô%�Ø�NŠN˜A˜q˜6Ñ"Ô"Ð"Ð"Øõ �4Ñ Ô ˆØˆØ•#�g‘,”,ÒÑØ˜Q”Z‰FˆB�Ø�QŠwˆwØ�Q‘�ØØˆDÝ˜1˜q™5¥# g¡,¤,Ñ/Ô/ð ð �Ø  œ‘��BØ—F’F˜2‘J”J�Ø�AœE�>�>ð ˜R™�AØ”s˜a’x�xØ¥ Q¨¡¤Ñ*˜˜àœ3 ¤š9˜9Ý&,¨Q¬S°!´#Ñ&6Ô&6™G˜C Ø!¥S¨¨C¡[¤[Ñ0˜EÝ (¨¨Q¬SÑ 1Ô 1˜AØŸš Q¨ FÑ+Ô+Ð+à"$ Q¡$¨ �G˜A‘Jà˜A™�BØ�QœU�{�{Ø˜øØ�œˆˆÝ˜"˜b‘k”k�Ø”=ð 
0Ø˜S‘L�E�Eõ  #Ÿ}š}¨SÑ1Ô1ð 0ð 0˜Øœ=ð 0Ø! S™L˜E˜Eà#&¤:Ð-Ð-Ð-Ø%(¤X™F˜B Ø  œHŸOšO¨BÑ/Ô/Ð/Ð/à�NŠN˜4Ñ Ô Ð Ø�‰FˆAðU •#�g‘,”,ÒÑðZ —J’J‘L”Lð 	ð 	‰DˆAˆqØ�c˜1�gˆD�‰GˆGð ð 	Mà×(Ò(Ñ*Ô*‰DˆAˆqå˜!˜Q‘<”<‰DˆAˆqØ�1‰uð Ø˜�à�AŠvˆvØ—’�aœoÑ.Ô.Ð.Ð.Øð Mõ !  A™œ�Ø ŸJšJ™LœLð Mð M‘D�A�qØ˜E’z�z a¤m�zØ#$ "˜˜Q™Ø˜øð —M’M¥#¥a¤m°UÀUÐ"KÑ"KÔ"KÑLÔLÐLð 	�ŠÐ:Ð:¨T¯ZªZ©\¬\Ð:Ñ:Ô:Ñ;Ô;Ð;ð •Q”Z¥Ô!3Ð4Ð4Ð4ð	.ð 	.ð 	.ð "0 °¸Ñ!:Ô!:ÑˆF�JØ"0 .°¸*Ñ"EÔ"EÑˆG�ZØ�ZÑˆEð •AÔ%Ð%Ð%ðQð Q ð Qñ Qô QˆFðSð S 'ð Sñ Sô SˆGˆGð Œ]ð 	.õ Ð>Ð>Ð>Ð>°gÐ>Ñ>Ô>Ñ>Ô>ð 7Ø�w ¨Ð6Ð6ÝÐ8Ð8°Ð8Ñ8Ô8Ñ8Ô8ð 2Ýœ�w  MÐ1Ð1Ø�7˜B Ð-Ð-ð ˆØð 	ð 	ˆAØŒ{ð Ø˜‘
��à—’˜A‘”��Øˆõ 	�ÑÔÐð �œÐÐØ�MŠM˜!˜UÑ#Ô#Ð#õ Ô(ð 	?°ð 	?½SÀ¹[¼[ÈAÒ=MÐ=MØ�q”	Ô#ð >NØ(.¨q¬	Ô(;ð >NØ@FÀqÄ	Ô@Pð >Nð ˜1”IˆEÝÐ<Ð<Ð<Ð<¨V°A¬Y¬^Ð<Ñ<Ô<Ð=Ð>ˆFà�w Ð-Ð-r$   c                 óè  ‡— |                       d¬¦  «        \  }}‰j        r@t          ˆfd„|D ¦   «         Ž t          t                               |¦  «        ‰d¬¦  «        z  S ‰j        rÕ‰j        dk    rÊ| j        rÃ|                      ¦   «         d         }|j        r¢t          |dz  ¦  «         
                    ¦   «         \  }}t          |d¦  «        \  }}|rft          |d¦  «        \  }}|rQddlm} t          |¦  «        |z  }	t          |	‰j        z  d ||¦  «        t"          j        z  z   ‰j        z  ¦  «        S t          | ‰d¬¦  «        }
‰j        s‰j        r|
                     ¦   «         S |
S )	NF)Úsplit_1c                 ó4   •— g | ]}t          |‰d ¬¦  «        ‘ŒS )FrX   ru   rr   s     €r%   r^   z#Mul._eval_power.<locals>.<listcomp>Õ  s(   ø€ ÐBÐBÐB°q�˜Q ¨EÐ2Ñ2Ô2ÐBÐBÐBr$   rX   rW   r   r   ©Úsign)r1   rž   r4   rv   r5   r“   r¦   Úis_imaginaryÚas_real_imagÚabsr¬   r   Ú$sympy.functions.elementary.complexesrØ   r   r=   r§   r   rš   Úis_FloatÚ_eval_expand_power_base)rI   ri   Úcargsr<   r:   rÑ   rj   ra   rØ   r°   r§   s    `         r%   Ú_eval_powerzMul._eval_powerÏ  s–  ø€ ð —M’M¨%�MÑ0Ô0‰	ˆˆràŒ<ð 	;ÝÐBÐBÐBÐB¸EÐBÑBÔBÐCÝ•C—N’N 2Ñ&Ô&¨°EÐ:Ñ:Ô:ñ;ð ;àŒ=ð 	`˜QœS AšX˜XØÔ ð 
`Ø×%Ò%Ñ'Ô'¨Ô*�Ø”=ð `Ý˜q ™s™8œ8×2Ò2Ñ4Ô4‘D�A�qÝ*¨1¨aÑ0Ô0‘D�A�qØð `Ý.¨q°!Ñ4Ô4™˜˜1Øð `ØQÐQÐQÐQÐQÐQÝ '¨¡
¤
¨1¡˜AÝ#3°A°q´s±F¸QÀÀÀaÁÄÍÌÑAXÑ=XÐ[\Ô[^Ñ<^Ñ#_Ô#_Ð_å��a %Ð(Ñ(Ô(ˆàŒ=ð 	/˜AœJð 	/Ø×,Ò,Ñ.Ô.Ð.àˆr$   c                 ó   — dd| j         fS )Né   r   )r   ©r­   s    r%   Ú	class_keyzMul.class_keyë  s   € à�!�S”\Ð!Ð!r$   c                 ó&  — |                       ¦   «         \  }}|t          j        u r;|j        rt	          j        ||¦  «         }n2|                     |¦  «        }|�|}| }nt	          j        | |¦  «        }|j        r|                     ¦   «         S |S rC   )rc   r   rR   r   r   Ú_eval_evalfÚ	is_numberÚexpand)rI   Úprecr;   Úmr¯   Úmnews         r%   ræ   zMul._eval_evalfï  s™   € Ø× Ò Ñ"Ô"‰ˆˆ1Ø•”ÐÐØŒxð ÝÔ)¨!¨TÑ2Ô2Ð2��à—}’} TÑ*Ô*�ØÐ#Ø�AØ�R��åÔ$ T¨4Ñ0Ô0ˆBØŒ<ð 	Ø—9’9‘;”;ÐØˆ	r$   c                 ó¶   — ddl m} |                      ¦   «         \  }}|t          j        urt          d¦  «        ‚ |d¦  «        j         ||¦  «        j        fS )z;
        Convert self to an mpmath mpc if possible
        r   )ÚFloatz7Cannot convert Mul to mpc. Must be of the form Number*Ir   )Únumbersrí   rc   r   rš   ÚAttributeErrorÚ_mpf_)rI   rí   Úim_partÚ	imag_units       r%   Ú_mpc_z	Mul._mpc_ÿ  sj   € ð
 	#Ð"Ð"Ð"Ð"Ð"Ø!×.Ò.Ñ0Ô0Ñˆ�Ø�AœOÐ+Ð+õ !Ð!ZÑ[Ô[Ð[à��a‘””   g¡¤Ô 4Ð5Ð5r$   c                 ó°   — | j         }t          |¦  «        dk    rt          j        | fS t          |¦  «        dk    r|S |d          | j        |dd…         Ž fS )ao  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   rW   r   N)r+   r’   r   r/   Ú_new_rawargs)rI   r+   s     r%   Úas_two_termszMul.as_two_terms  s^   € ð* Œyˆåˆt‰9Œ9˜Š>ˆ>Ý”5˜$�;ÐÝ�‰YŒY˜!Š^ˆ^ØˆKð ˜”7Ð-˜DÔ-¨t°A°B°B¬xÐ8Ð8Ð8r$   )Úrationalc                óV  ‡— ‰r6t          | j        ˆfd„d¬¦  «        \  }} | j        |Ž t          |¦  «        fS | j        }|d         j        rO|r|d         j        r|d         |dd …         fS |d         j        r!t          j        |d          f|dd …         z   fS t          j	        |fS )Nc                 ó   •—  | j         ‰Ž S rC   )Úhas)ÚxÚdepss    €r%   ú<lambda>z"Mul.as_coeff_mul.<locals>.<lambda>0  s   ø€ ¨u¨q¬u°d¨|€ r$   T)Úbinaryr   r   )
r   r+   rõ   Útupler    r“   rL   r   rR   r/   )rI   r÷   rü   ÚkwargsÚl1Úl2r+   s     `    r%   rP   zMul.as_coeff_mul-  sÊ   ø€ àð 	5Ý˜$œ)Ð%;Ð%;Ð%;Ð%;ÀDÐIÑIÔI‰FˆB�Ø$�4Ô$ bÐ)­5°©9¬9Ð4Ð4ØŒyˆØ�Œ7Ôð 	=Øð =˜t AœwÔ2ð =Ø˜A”w  Q R R¤Ð(Ð(Ø�a”Ô-ð =Ý”}¨¨Q¬ x k°D¸¸¸´HÑ&<Ð<Ð<ÝŒu�dˆ{Ðr$   Fc                 ó  — | j         d         | j         dd…         }}|j        rT|r|j        r)t          |¦  «        dk    r
||d         fS | | j        |Ž fS |j        rt          j         | j        | f|z   Ž fS t          j        | fS )zC
        Efficiently extract the coefficient of a product.
        r   r   N)	r+   r    r“   r’   rõ   rL   r   rR   r/   )rI   r÷   r�   r+   s       r%   rc   zMul.as_coeff_Mul:  s¨   € ð ”i ”l D¤I¨a¨b¨b¤MˆtˆàŒ?ð 	MØð M˜uÔ0ð MÝ�t‘9”9 ’>�>Ø  $ q¤'˜>Ð)à Ð"3 $Ô"3°TÐ":Ð:Ð:ØÔ+ð MÝ”}Ð&7 dÔ&7¸E¸6¸)ÀdÑ:JÐ&LÐLÐLÝŒu�dˆ{Ðr$   c                 óÈ  — ddl m}m}m} g }g }g }t          j        }	| j        D ]ø}
|
                     ¦   «         \  }}|j        r| 	                    |¦  «         Œ6|j        r#| 	                    |t          j
        z  ¦  «         Œ`|
j        r||r|
                     ¦   «         nd }t          |¦  «        D ]1\  }}||k    r&| 	                     ||¦  «        dz  ¦  «         ||=  n#Œ2|
j        r|	|
z  }	ŒÍ| 	                    |
¦  «         Œã| 	                    |
¦  «         Œù | j        |Ž }|                     d¦  «        |k    rd S t#          |¦  «        dz  r ||                     d¦  «        ¦  «        }nt          j        } | j        ||z   Ž }| ||¦  «        z  | ||¦  «        z  }}|	dk    rI|dk    r&|j        r|t          j        fS t          j        ||z  fS |t          j        u r||fS | |z  ||z  fS ddlm}  ||	d¬¦  «                             ¦   «         \  }}|t          j        u r||z  ||z  z
  ||z  ||z  z   fS | |z  ||z  }}||z  ||z  z
  ||z  ||z  z   fS )	Nr   )ÚAbsÚimÚrerW   Úignorer   )Ú
expand_mulF)Údeep)rÜ   r  r  r  r   r/   r+   rÚ   rƒ   r3   rš   r"   Ú	conjugateÚ	enumerater”   ÚfuncÚgetr’   r0   r–   Úfunctionr	  )rI   r
  Úhintsr  r  r  ÚotherÚcoeffrÚcoeffiÚaddtermsr:   r°   rÂ   Úaconjrû   rê   ÚimcoÚrecor	  ÚaddreÚaddims                        r%   rÚ   zMul.as_real_imagJ  sÞ  € ØDÐDÐDÐDÐDÐDÐDÐDÐDÐDØˆØˆØˆÝ”5ˆØ”ð 	 ð 	 ˆAØ—>’>Ñ#Ô#‰DˆAˆqØŒyð  Ø—’˜aÑ Ô Ð Ð Ø”ð  Ø—’˜a¥¤Ñ/Ñ0Ô0Ð0Ð0ØÔ!ð  Ø).Ð8˜Ÿš™œ˜°D�å% eÑ,Ô,ð 	(ð 	(‘D�A�qØ˜E’z�zØŸš c c¨!¡f¤f¨a¡iÑ0Ô0Ð0Ø! !˜HØ˜ð "ð
 ”xð (Ø  A™˜˜àŸš Q™œ˜øà—’˜Q‘”��ØˆDŒI�uÐˆØ�9Š9�XÑÔ !Ò#Ð#ØˆFÝˆv‰;Œ;˜‰?ð 	Ø�2�f—j’j ‘m”mÑ$Ô$ˆDˆDõ ”6ˆDØˆtŒy˜6 F™?Ð,ˆØ�R�R˜‘U”U‘
˜D   A¡¤™Jˆ1ˆØ�qŠ=ˆ=Ø�AŠvˆvØ”<ð /Ø ¥!¤&˜>Ð)åœF D¨¡IÐ.Ð.Ø•q”vˆ~ˆ~Ø˜1�v�Ø�E˜!‘G˜T !™VÐ$Ð$Ø(Ð(Ð(Ð(Ð(Ð(Ø!�z (°Ð7Ñ7Ô7×DÒDÑFÔF‰ˆˆuØ•1”6ˆ>ˆ>Ø�e‘G˜a ™gÑ% q¨¡w°°5±Ñ'8Ð9Ð9à�5˜‘7˜D ™FˆqˆAØ�e‘G˜a ™gÑ% q¨¡w°°5±Ñ'8Ð9Ð9r$   c                 ó6  ‡— t          | ¦  «        }|dk    r| d         j        S g }t                               | d|dz  …         ¦  «        }t                               | |dz  d…         ¦  «        Šˆfd„|D ¦   «         }t	          |Ž }t	          j        |¦  «        S )zk
        Helper function for _eval_expand_mul.

        sums must be a list of instances of Basic.
        r   r   NrW   c                 ó:   •— g | ]}‰D ]}t          ||¦  «        ‘ŒŒS r#   )r4   )rF   r:   rb   Úrights      €r%   r^   z#Mul._expandsums.<locals>.<listcomp>�  s.   ø€ Ð8Ð8Ð8˜q°%Ð8Ð8¨Q•�Q˜‘”Ð8Ð8Ð8Ð8r$   )r’   r+   r4   Ú_expandsumsrf   r«   )ÚsumsÚLÚtermsÚleftÚaddedr  s        @r%   r  zMul._expandsums�  s–   ø€ õ �‰IŒIˆØ�Š6ˆ6Ø˜”7”<ÐØˆÝ�Š˜t E Q¨¡T Eœ{Ñ+Ô+ˆÝ—’  Q¨¡T U U¤Ñ,Ô,ˆà8Ð8Ð8Ð8 DÐ8Ñ8Ô8ˆÝ�U�ˆÝŒ}˜UÑ#Ô#Ð#r$   c                 óö  ‡— ddl m} | } ||‰                     dd¦  «        ¦  «        \  }}|j        rˆfd„||fD ¦   «         \  }}||z  }|j        s|S g g d}}}|j        D ]`}	|	j        r|                     |	¦  «         d}Œ!|	j        r|                     |	¦  «         Œ>|                     t          |	¦  «        ¦  «         Œa|s|S  | j	        |Ž }|r¦‰                     dd¦  «        }
| j	         
                    |¦  «        }g }|D ]h}|  	                    ||¦  «        }|j        r4t          d„ |j        D ¦   «         ¦  «        r|
r|                     ¦   «         }|                     |¦  «         Œit          |Ž S |S )	Nr   ©ÚfractionÚexactFc                 ó<   •— g | ]}|j         r |j        d i ‰¤Žn|‘ŒS )r#   )r   Ú_eval_expand_mul)rF   rÂ   r  s     €r%   r^   z(Mul._eval_expand_mul.<locals>.<listcomp>�  sI   ø€ ð !ð !ð !Øð 45´8ÐBÐ&�AÔ&Ð/Ð/¨Ð/Ð/Ð/Àð !ð !ð !r$   Tr
  c              3   ó$   K  — | ]}|j         V — Œd S rC   )r”   rE   s     r%   rG   z'Mul._eval_expand_mul.<locals>.<genexpr>¸  s$   è è € Ð'AÐ'A°Q¨¬Ð'AÐ'AÐ'AÐ'AÐ'AÐ'Ar$   )Úsympy.simplify.radsimpr%  r  r   r+   r”   r3   r"   r	   r  r  r£   r(  rf   )rI   r  r%  ÚexprrÑ   rj   Úplainr  ÚrewriteÚfactorr
  r   r+   Útermra   s    `             r%   r(  zMul._eval_expand_mul”  sá  ø€ Ø3Ð3Ð3Ð3Ð3Ð3ð ˆàˆx˜˜eŸiši¨°Ñ7Ô7Ñ8Ô8‰ˆˆ1ØŒ8ð 	!ð!ð !ð !ð !Ø˜Q˜ð!ñ !ô !‰DˆAˆqà�‰sˆØŒ{ð 	ØˆKà! 2 u�WˆtˆØ”ið 	/ð 	/ˆFØŒ}ð /Ø—’˜FÑ#Ô#Ð#Ø��àÔ(ð /Ø—L’L Ñ(Ô(Ð(Ð(à—K’K¥ f¡¤Ñ.Ô.Ð.Ð.àð 	ØˆKà�D”I˜uÐ%ˆEØð Ø—y’y ¨Ñ/Ô/�Øœ	×-Ò-¨dÑ3Ô3�Ø�Ø!ð #ð #�DØŸ	š	 %¨Ñ.Ô.�AØ”xð 1¥CÐ'AÐ'A¸!¼&Ð'AÑ'AÔ'AÑ$AÔ$Að 1Àdð 1Ø×.Ò.Ñ0Ô0˜Ø—K’K ‘N”N�N�NÝ˜D�zÐ!à�r$   c           
      ó`  — t          | j        ¦  «        }g }t          t          |¦  «        ¦  «        D ]h}||                              |¦  «        }|rI|                     t          d„ |d |…         |gz   ||dz   d …         z   t          j        ¦  «        ¦  «         Œit          j
        |¦  «        S )Nc                 ó   — | |z  S rC   r#   )rû   Úys     r%   rý   z&Mul._eval_derivative.<locals>.<lambda>È  s
   € °°1±€ r$   r   )r.   r+   r¢   r’   Údiffr3   r   r   r/   rf   Úfromiter)rI   Úsr+   r   rÂ   rj   s         r%   Ú_eval_derivativezMul._eval_derivative¿  s¨   € å�D”I‰ŒˆØˆÝ•s˜4‘y”yÑ!Ô!ð 	_ð 	_ˆAØ�Q”—’˜Q‘”ˆAØð _ð —’�VÐ$4Ð$4°t¸B¸Q¸B´xÀ1À#±~ÈÈQÐQRÉUÈVÈVÌÑ7TÕWXÔW\Ñ]Ô]Ñ^Ô^Ð^øÝŒ|˜EÑ"Ô"Ð"r$   c                 óZ  •‡‡‡‡— ddl m} ddlm}m}m} t          ‰||f¦  «        s"t          ¦   «                              ‰‰¦  «        S ddl	m
} | j        Št          ‰¦  «        }t          ‰t          |f¦  «        r^g }	ddlm}
  |
|‰¦  «        D ]@\  Š}t!          ˆfd„t#          ‰‰¦  «        D ¦   «         Ž }|	                     ||z  ¦  «         ŒAt'          |	Ž S ddlm} dd	lm} dd
lm}  |d|z  |¬¦  «        Š‰t5          ‰¦  «        z
  } |‰¦  «        }|t7          t9          |‰¦  «        ¦  «        z   ||¦  «        z  t!          ˆˆˆfd„t;          |dz
  ¦  «        D ¦   «         Ž z  ‰d                              ‰ |d|¦  «        f¦  «        z  ˆfd„‰D ¦   «         }} ||g|¢R Ž S )Nr   )ÚAppliedUndef)ÚSymbolÚsymbolsÚDummy)ÚIntegerr   )Ú!multinomial_coefficients_iteratorc                 óD   •— g | ]\  }}|                      ‰|f¦  «        ‘ŒS r#   ©r3  )rF   ÚkÚargr5  s      €r%   r^   z0Mul._eval_derivative_n_times.<locals>.<listcomp>Û  s-   ø€ ÐJÐJÐJ©v¨q°#˜#Ÿ(š( A q 6Ñ*Ô*ÐJÐJÐJr$   )ÚSum)Ú	factorial)ÚMaxzk1:%irã   c                 óV   •— g | ]%}‰|                               ‰‰|         f¦  «        ‘Œ&S r#   r?  )rF   ra   r+   Úkvalsr5  s     €€€r%   r^   z0Mul._eval_derivative_n_times.<locals>.<listcomp>æ  s1   ø€ ÐBÐBÐB°!�$�q”'—,’,  5¨¤8˜}Ñ-Ô-ÐBÐBÐBr$   r{   c                 ó   •— g | ]}|d ‰f‘ŒS ©r   r#   )rF   r@  rÑ   s     €r%   r^   z0Mul._eval_derivative_n_times.<locals>.<listcomp>è  s   ø€ Ð&Ð&Ð&˜1ˆa��AˆYÐ&Ð&Ð&r$   )r  r8  Úsymbolr9  r:  r;  rˆ   ÚsuperÚ_eval_derivative_n_timesrî   r<  r+   r’   ÚintÚsympy.ntheory.multinomialr=  r4   Úzipr3   rf   Úsympy.concrete.summationsrB  Ú(sympy.functions.combinatorial.factorialsrC  Ú(sympy.functions.elementary.miscellaneousrD  ÚsumÚprodÚmapr¢   r3  )rI   r5  rÑ   r8  r9  r:  r;  r<  rê   r   r=  r;   r§   rB  rC  rD  ÚklastÚnfactri   Úlr+   rF  Ú	__class__s    ``                 @@€r%   rK  zMul._eval_derivative_n_timesË  sJ  øøøøø€ à*Ð*Ð*Ð*Ð*Ð*Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ý˜!˜l¨FÐ3Ñ4Ô4ð 	:õ ‘7”7×3Ò3°A°qÑ9Ô9Ð9Ø$Ð$Ð$Ð$Ð$Ð$ØŒyˆÝ�‰IŒIˆÝ�a�#˜w˜Ñ(Ô(ð 	àˆEØSÐSÐSÐSÐSÐSØ=Ð=¸aÀÑCÔCð $ð $‘��qÝÐJÐJÐJÐJ½¸UÀDÑ9IÔ9IÐJÑJÔJÐK�Ø—’˜Q ™UÑ#Ô#Ð#Ð#Ý˜�;ÐØ1Ð1Ð1Ð1Ð1Ð1ØFÐFÐFÐFÐFÐFØ@Ð@Ð@Ð@Ð@Ð@Ø�˜ !™¨Ð/Ñ/Ô/ˆØ•C˜‘J”J‘ˆØ�	˜!‘”ˆà•$•s˜9 eÑ,Ô,Ñ-Ô-Ñ-¨i¨i¸Ñ.>Ô.>Ñ>ÝÐBÐBÐBÐBÐBÐBµu¸Q¸q¹S±z´zÐBÑBÔBÐCñDà�ŒH�MŠM˜1˜c˜c ! U™mœmÐ,Ñ-Ô-ñ.ð 'Ð&Ð&Ð& Ð&Ñ&Ô&ð	 ˆð
 ˆs�1ˆz�qˆzˆzˆzÐr$   c                 óÄ   — ddl m} | j        d         }t          | j        dd …         Ž }|                     |||z   ¦  «         ||||¦  «        z   ||||¦  «        |z  z   S )Nr   )Údifference_deltar   )Úsympy.series.limitseqrZ  r+   r4   Úsubs)rI   rÑ   ÚstepÚddÚarg0Úrests         r%   Ú_eval_difference_deltazMul._eval_difference_deltaë  s}   € Ø@Ð@Ð@Ð@Ð@Ð@ØŒy˜Œ|ˆÝ�D”I˜a˜b˜b”MÐ"ˆØ—	’	˜!˜Q ™XÑ&Ô&¨¨¨D°!°TÑ):Ô):Ñ:¸R¸RÀÀaÈÑ=NÔ=NØñ>ñ ð 	r$   c                 óü   — |                       ¦   «         \  }}t                               |¦  «        }t          |¦  «        dk    r7| j                             ||¦  «        }|d                              ||¦  «        S d S )Nr   r   )rc   r4   r«   r’   rX  Ú_combine_inverseÚmatches)rI   r+  Ú	repl_dictr�   r   Únewexprs         r%   Ú_matches_simplezMul._matches_simpleò  sm   € à×(Ò(Ñ*Ô*‰ˆˆuÝ—’˜eÑ$Ô$ˆÝˆu‰:Œ:˜Š?ˆ?Ø”n×5Ò5°d¸EÑBÔBˆGØ˜”8×#Ò# G¨YÑ7Ô7Ð7Øˆr$   Nc                 ó  — t          |¦  «        }| j        r|j        r|                      |||¦  «        S | j        |j        urd S |                      ¦   «         \  }}|                     ¦   «         \  }}d„ ||fD ¦   «         \  }}t	          |Ž }t	          |Ž }	|                     |	||¦  «        }|s||k    rd S t                               |¦  «        }t                               |¦  «        }t                               |||¦  «        }|pd S )Nc                 ó   — g | ]}|pd g‘ŒS ©r   r#   r…   s     r%   r^   zMul.matches.<locals>.<listcomp>  s   € Ð-Ð-Ð-˜q�!�(˜�sÐ-Ð-Ð-r$   )r   r"   Ú_matches_commutativer1   r4   rd  Ú_matches_expand_powsÚ_matches_noncomm)
rI   r+  re  ÚoldÚc1Únc1Úc2Únc2Úcomm_mul_selfÚcomm_mul_exprs
             r%   rd  zMul.matchesû  s  € Ý�t‰}Œ}ˆØÔð 	 4Ô#6ð 	Ø×,Ò,¨T°9¸cÑBÔBÐBØÔ ¨Ô(;Ð;Ð;Ø�4ð —-’-‘/”/‰ˆˆCØ—-’-‘/”/‰ˆˆCØ-Ð- R¨ HÐ-Ñ-Ô-‰ˆˆBõ ˜R˜ˆÝ˜R˜ˆà!×)Ò)¨-¸ÀCÑHÔHˆ	ð ð 	˜R 2šX˜XØ�4õ ×&Ò& sÑ+Ô+ˆÝ×&Ò& sÑ+Ô+ˆå×(Ò(¨¨c°9Ñ=Ô=ˆ	àÐ ˜DÐ r$   c                 óª   — g }| D ]M}|j         r/|j        dk    r$|                     |j        g|j        z  ¦  «         Œ8|                     |¦  «         ŒN|S rO   )r�   Úexpr2   Úbaser3   )Úarg_listÚnew_argsrA  s      r%   rl  zMul._matches_expand_pows  sd   € àˆØð 	%ð 	%ˆCØŒzð %˜cœg¨šk˜kØ—’ ¤ 
¨S¬WÑ 4Ñ5Ô5Ð5Ð5à—’ Ñ$Ô$Ð$Ð$Øˆr$   c                 ó
  — |€i }n|                      ¦   «         }g }d}|\  }}i }|t          |¦  «        k     rË|t          | ¦  «        k     r¸| |         }|j        rt                               ||¦  «         t                               ||| |¦  «        }	|	r,|	\  }
}|                     |
¦  «         |r|D ]}||         ||<   Œ|sdS |                     ¦   «         }|\  }}|t          |¦  «        k     r|t          | ¦  «        k     °¸|S )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_Wildr4   Ú_matches_add_wildcardÚ_matches_new_statesr2   r0   )ÚnodesÚtargetsre  ÚagendaÚstateÚnode_indÚ
target_indÚwildcard_dictÚnodeÚstates_matchesÚ
new_statesÚnew_matchesÚmatchs                r%   rm  zMul._matches_noncomm%  sB  € ð ÐØˆIˆIà!ŸšÑ(Ô(ˆIð ˆàˆØ$Ñˆ�*àˆà�3˜w™<œ<Ò'Ð'¨Hµs¸5±z´zÒ,AÐ,AØ˜”?ˆDàŒ|ð @Ý×)Ò)¨-¸Ñ?Ô?Ð?å ×4Ò4°]ÀEØ5:¸GñEô EˆNàð >Ø*8Ñ'�
˜KØ—’˜jÑ)Ô)Ð)Øð >Ø!,ð >ð >˜Ø+6°uÔ+=˜	 %Ñ(Ð(Øð -Ø�tàŸ
š
™œ�Ø',Ñ$�˜*ð% �3˜w™<œ<Ò'Ð'¨Hµs¸5±z´zÒ,AÐ,Að( Ðr$   c                 óN   — |\  }}|| v r| |         \  }}||f| |<   d S ||f| |<   d S rC   r#   )Ú
dictionaryr‚  rƒ  r„  ÚbeginÚends         r%   r}  zMul._matches_add_wildcardP  sO   € à$Ñˆ�*Ø�zÐ!Ð!Ø# HÔ-‰JˆE�3Ø$)¨:Ð#6ˆJ�xÑ Ð Ð à$.°
Ð#;ˆJ�xÑ Ð Ð r$   c                 ó  — |\  }}||         }||         }|t          |¦  «        dz
  k    r|t          |¦  «        dz
  k     rd S |j        rÑt                               | |||¦  «        }|r°t                               | ||¦  «        }	|	D ]R}
| |
         \  }}| |         \  }}|||dz   …         }|||dz   …         }t          ||¦  «        D ]\  }}||k    r  d S ŒŒS||dz   fg}|t          |¦  «        dz
  k     r|                     |dz   |dz   f¦  «         ||fS d S |t          |¦  «        dz
  k    r|t          |¦  «        dz
  k     rd S |                     |¦  «        }|r|dz   |dz   fg|fS ||k    r|dz   |dz   fgd fS d S )Nr   )r’   r|  r4   Ú_matches_match_wildsÚ_matches_get_other_nodesrN  r3   rd  )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~  zMul._matches_new_statesY  s  € à$Ñˆ�*Ø�XŒˆØ˜Ô$ˆð �˜W™œ¨Ñ)Ò)Ð)¨h½¸U¹¼Àa¹Ò.GÐ.GØ�4àŒ<ð )	Ý×4Ò4°ZÀØ5:¸GñEô EˆMàð 0õ #&×">Ò">¸zØ?DÀhñ#Pô #P�à*ð 	(ð 	(�CØ-7¸¬_Ñ*�K Ø+5°hÔ+?Ñ(�J à$+¨K¸	ÀA¹Ð,EÔ$F�MØ&-¨j¸ÀA¹Ð.EÔ&F�Oå'*¨?¸MÑ'JÔ'Jð (ð (™˜˜eØ 5š=˜=Ø#' 4 4 4ð )ð(ð '¨
°Q©Ð7Ð8�	à�c %™jœj¨1™nÒ,Ð,Ø×$Ò$ h°¡l°JÀ±NÐ%CÑDÔDÐDØ  -Ð/Ð/ð/0ð 0ð8 �3˜u™:œ:¨™>Ò)Ð)¨j½3¸w¹<¼<È!Ñ;KÒ.KÐ.KØ�tà ŸLšL¨Ñ0Ô0ˆMàð Ø! A™ z°A¡~Ð6Ð7¸ÐFÐFØ˜’�Ø! A™ z°A¡~Ð6Ð7¸Ð=Ð=à�tr$   c                 ó´   — ||         }| |         \  }}|||dz   …         }t          |¦  «        dk    r	t          |Ž n|d         }|                     |¦  «        S )z@Determine matches of a wildcard with sub-expression in `target`.r   r   )r’   r4   rd  )	rŒ  Úwildcard_indr  r€  Úwildcardr�  rŽ  r   Úmults	            r%   r�  zMul._matches_match_wildsŽ  sa   € ð ˜Ô&ˆØ Ô-‰
ˆˆsØ˜˜c A™g˜Ô&ˆå! %™jœj¨1šn˜n�s�Eˆ{ˆ{°%¸´(ˆØ×Ò Ñ%Ô%Ð%r$   c                 ó4   ‡‡— ‰|         Šˆˆfd„| D ¦   «         S )z8Find other wildcards that may have already been matched.c                 ó,   •— g | ]}‰|         ‰k    ¯|‘ŒS r#   r#   )rF   r•  Úind_noder  s     €€r%   r^   z0Mul._matches_get_other_nodes.<locals>.<listcomp>œ  s'   ø€ ÐDÐDÐD˜¨U°3¬Z¸8Ò-CÐ-C�Ð-CÐ-CÐ-Cr$   r#   )rŒ  r  rƒ  r¤  s    ` @r%   r‘  zMul._matches_get_other_nodes˜  s,   øø€ ð ˜”?ˆØDÐDÐDÐDÐD˜zÐDÑDÔDÐDr$   c                 óØ  — ddl m} ddlm} | |k    rt          j        S d„ } || |¦  «        s ||| ¦  «        rt          j        S t          d„ | |fD ¦   «         ¦  «        �ro |d¦  «        }t          j        |i}|t          j        i}|                      |¦  «         	                    ¦   «         }|                     |¦  «         	                    ¦   «         }	t          |	¦  «        }
t          |	                     ¦   «         ¦  «        D ]F}||v r@||xx         |	                     |¦  «        z  cc<   ||         s|                     |¦  «         ŒGt          |	¦  «        |
k    rpt          d„ |                     ¦   «         D ¦   «         Ž                      |¦  «        } t          d	„ |	                     ¦   «         D ¦   «         Ž                      |¦  «        }| |z  } ||¦  «        }|j        r|n|S )
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   )r;  c                 óž   — | j         rE|j        r>|                      d¦  «        |                     ¦   «                              d¦  «        k    S dS )Nr   F)rÝ   Úis_comparableÚ__add__Úevalf)rW  r°   s     r%   Úcheckz#Mul._combine_inverse.<locals>.checkª  sG   € ØŒzð <˜aœoð <ð —y’y ‘|”| q§w¢w¡y¤y×'8Ò'8¸Ñ';Ô';Ò;Ð;Ø�5r$   c              3   ó2   K  — | ]}|j         p|j        V — Œd S rC   )r�   r   ©rF   rÂ   s     r%   rG   z'Mul._combine_inverse.<locals>.<genexpr>³  s+   è è € Ð8Ð8¨ˆqŒxÐ#˜1œ8Ð8Ð8Ð8Ð8Ð8Ð8r$   ÚIc                 ó   — g | ]
\  }}||z  ‘ŒS r#   r#   ©rF   r@  Úvs      r%   r^   z(Mul._combine_inverse.<locals>.<listcomp>Â  ó    € Ð7Ð7Ð7¡T Q¨˜A˜q™DÐ7Ð7Ð7r$   c                 ó   — g | ]
\  }}||z  ‘ŒS r#   r#   r°  s      r%   r^   z(Mul._combine_inverse.<locals>.<listcomp>Ã  r²  r$   )Úsympy.simplify.simplifyr¦  rI  r;  r   r/   r£   rš   ÚxreplaceÚas_powers_dictr’   rÿ   Úkeysr0   r4   re   r    )ÚlhsÚrhsr¦  r;  r«  rj   Ú_iÚi_r:   rb   Úblenr]   r¯   Úsrvs                 r%   rc  zMul._combine_inversež  sù  € ð 	5Ð4Ð4Ð4Ð4Ð4Ø!Ð!Ð!Ð!Ð!Ð!Ø�#Š:ˆ:Ý”5ˆLð	ð 	ð 	ð ˆ5��c‰?Œ?ð 	˜e˜e C¨™oœoð 	Ý”5ˆLÝÐ8Ð8¨c°3¨ZÐ8Ñ8Ô8Ñ8Ô8ñ 	Fð ��c‘
”
ˆAÝ”/ 1Ð%ˆBØ•Q”_Ð%ˆBØ—’˜RÑ Ô ×/Ò/Ñ1Ô1ˆAØ—’˜RÑ Ô ×/Ò/Ñ1Ô1ˆAÝ�q‘6”6ˆDÝ˜AŸFšF™HœH‘o”oð "ð "�Ø˜�7�7Ø�b�E�E”E˜QŸUšU 2™YœYÑ&�E�E‘EØ˜Rœ5ð "ØŸš˜b™	œ	˜	øÝ�1‰vŒv˜Š~ˆ~ÝÐ7Ð7¨Q¯WªW©Y¬YÐ7Ñ7Ô7Ð8×AÒAÀ"ÑEÔE�ÝÐ7Ð7¨Q¯WªW©Y¬YÐ7Ñ7Ô7Ð8×AÒAÀ"ÑEÔE�Ø�‰WˆØˆh�r‰lŒlˆØ”mÐ+ˆsˆs¨Ð+r$   c                 óº   — t          t          ¦  «        }| j        D ]>}|                     ¦   «                              ¦   «         D ]\  }}||xx         |z  cc<   ŒŒ?|S rC   )r   rL  r+   r¶  re   )rI   rj   r/  rb   ri   s        r%   r¶  zMul.as_powers_dictÈ  sl   € Ý�ÑÔˆØ”Ið 	ð 	ˆDØ×+Ò+Ñ-Ô-×3Ò3Ñ5Ô5ð ð ‘��1Ø�!��”˜‘	��‘�ðàˆr$   c                 óz   — t          t          d„ | j        D ¦   «         Ž ¦  «        \  }} | j        |Ž  | j        |Ž fS )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r#   )r¬   )rF   rŽ   s     r%   r^   z&Mul.as_numer_denom.<locals>.<listcomp>Ó  s$   € Ð#JÐ#JÐ#J¸1 A×$4Ò$4Ñ$6Ô$6Ð#JÐ#JÐ#Jr$   )r.   rN  r+   r  )rI   ÚnumersÚdenomss      r%   r¬   zMul.as_numer_denomÏ  sH   € õ �cÐ#JÐ#JÀÄ	Ð#JÑ#JÔ#JÐKÑLÔL‰ˆ�ØˆtŒy˜&Ð! 9 4¤9¨fÐ#5Ð5Ð5r$   c                 óì   — d }g }d}| j         D ][}|                     ¦   «         \  }}|j        s|dz  }|€|}n||k    s|dk    r| t          j        fc S |                     |¦  «         Œ\ | j        |Ž |fS )Nr   r   )r+   rœ   r"   r   r/   r3   r  )rI   r½   Úbasesr<   rê   rb   ri   s          r%   rœ   zMul.as_base_expÖ  s›   € ØˆØˆØˆØ”ð 	ð 	ˆAØ—=’=‘?”?‰DˆAˆqØÔ#ð Ø�a‘�ØˆzØ��Ø�b’�˜B šF˜FØ�QœU�{Ð"Ð"Ð"Ø�LŠL˜‰OŒOˆOˆOØˆtŒy˜%Ð  "Ð$Ð$r$   c                 óD   ‡— t          ˆfd„| j        D ¦   «         ¦  «        S )Nc              3   óB   •K  — | ]}|                      ‰¦  «        V — Œd S rC   )Ú_eval_is_polynomial©rF   r/  Úsymss     €r%   rG   z*Mul._eval_is_polynomial.<locals>.<genexpr>æ  s1   øè è € ÐHÐH°d�4×+Ò+¨DÑ1Ô1ÐHÐHÐHÐHÐHÐHr$   ©Úallr+   ©rI   rÉ  s    `r%   rÇ  zMul._eval_is_polynomialå  s(   ø€ ÝÐHÐHÐHÐH¸d¼iÐHÑHÔHÑHÔHÐHr$   c                 óD   ‡— t          ˆfd„| j        D ¦   «         ¦  «        S )Nc              3   óB   •K  — | ]}|                      ‰¦  «        V — Œd S rC   )Ú_eval_is_rational_functionrÈ  s     €r%   rG   z1Mul._eval_is_rational_function.<locals>.<genexpr>é  s1   øè è € ÐOÐO¸T�4×2Ò2°4Ñ8Ô8ÐOÐOÐOÐOÐOÐOr$   rÊ  rÌ  s    `r%   rÏ  zMul._eval_is_rational_functionè  s(   ø€ ÝÐOÐOÐOÐOÀTÄYÐOÑOÔOÑOÔOÐOr$   c                 óL   ‡‡— t          ˆˆfd„| j        D ¦   «         d¬¦  «        S )Nc              3   óD   •K  — | ]}|                      ‰‰¦  «        V — Œd S rC   )Úis_meromorphic)rF   rA  r:   rû   s     €€r%   rG   z+Mul._eval_is_meromorphic.<locals>.<genexpr>ì  s3   øè è € ÐKÐK¸#˜S×/Ò/°°1Ñ5Ô5ÐKÐKÐKÐKÐKÐKr$   T©Ú
quick_exit©r   r+   )rI   rû   r:   s    ``r%   Ú_eval_is_meromorphiczMul._eval_is_meromorphicë  s:   øø€ ÝÐKÐKÐKÐKÐKÀÄÐKÑKÔKØ'+ð-ñ -ô -ð 	-r$   c                 óD   ‡— t          ˆfd„| j        D ¦   «         ¦  «        S )Nc              3   óB   •K  — | ]}|                      ‰¦  «        V — Œd S rC   )Ú_eval_is_algebraic_exprrÈ  s     €r%   rG   z.Mul._eval_is_algebraic_expr.<locals>.<genexpr>ð  s1   øè è € ÐLÐL¸$�4×/Ò/°Ñ5Ô5ÐLÐLÐLÐLÐLÐLr$   rÊ  rÌ  s    `r%   rÙ  zMul._eval_is_algebraic_exprï  s(   ø€ ÝÐLÐLÐLÐLÀ$Ä)ÐLÑLÔLÑLÔLÐLr$   c                 ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rC   )r"   rE   s     r%   rG   zMul.<lambda>.<locals>.<genexpr>ò  s6   è è € ð 5-ð 5-ØˆÔð5-ð 5-ð 5-ð 5-ð 5-ð 5-r$   rÕ  ©rI   s    r%   rý   zMul.<lambda>ò  s.   € ­ð 5-ð 5-Ø"&¤)ð5-ñ 5-ô 5-ñ )-ô )-€ r$   c                 óÊ   — t          d„ | j        D ¦   «         ¦  «        }|du r@t          d„ | j        D ¦   «         ¦  «        r"t          d„ | j        D ¦   «         ¦  «        rd S dS |S )Nc              3   ó$   K  — | ]}|j         V — Œd S rC   )Ú
is_complexrE   s     r%   rG   z'Mul._eval_is_complex.<locals>.<genexpr>ö  s$   è è € Ð<Ð<¨Q˜AœLÐ<Ð<Ð<Ð<Ð<Ð<r$   Fc              3   ó$   K  — | ]}|j         V — Œd S rC   )Úis_infiniterE   s     r%   rG   z'Mul._eval_is_complex.<locals>.<genexpr>ø  s$   è è € Ð4Ð4 Q�1”=Ð4Ð4Ð4Ð4Ð4Ð4r$   c              3   ó(   K  — | ]}|j         d uV — ŒdS rŠ   ©rƒ   rE   s     r%   rG   z'Mul._eval_is_complex.<locals>.<genexpr>ù  s)   è è € ÐAÐA°!�q”y¨Ð-ÐAÐAÐAÐAÐAÐAr$   )r   r+   r£   )rI   Úcomps     r%   Ú_eval_is_complexzMul._eval_is_complexõ  sz   € ÝÐ<Ð<°$´)Ð<Ñ<Ô<Ñ<Ô<ˆØ�5ˆ=ˆ=ÝÐ4Ð4¨$¬)Ð4Ñ4Ô4Ñ4Ô4ð ÝÐAÐA°t´yÐAÑAÔAÑAÔAð  Ø˜4Ø�uØˆr$   c                 óº   — dx}}| j         D ]L}|j        r
|dur dS d}Œ|j        r
|dur dS d}Œ$|du r|j        €	|dur dS d }|du r|j        €	|dur dS d }ŒM||fS )NF)NNT)r+   rƒ   rá  )rI   Ú	seen_zeroÚseen_infiniter:   s       r%   Ú_eval_is_zero_infinite_helperz!Mul._eval_is_zero_infinite_helperþ  sÄ   € ðX %*Ð)ˆ	�Mà”ð 	)ð 	)ˆAØŒyð )Ø ¨Ð-Ð-Ø%˜:˜:Ø �	�	Ø”ð )Ø EÐ)Ð)Ø%˜:˜:Ø $��à Ð%Ð%¨!¬)Ð*;Ø$¨EÐ1Ð1Ø)˜z˜zØ $�IØ  EÐ)Ð)¨a¬mÐ.CØ ¨Ð-Ð-Ø)˜z˜zØ$(�Møà˜-Ð'Ð'r$   c                 óT   — |                       ¦   «         \  }}|du rdS |du r|du rdS d S ©NFT©ré  ©rI   rç  rè  s      r%   Ú_eval_is_zerozMul._eval_is_zeroA  sI   € ð $(×#EÒ#EÑ#GÔ#GÑ ˆ	�=à˜ÐÐØ�5Ø˜$ÐÐ =°EÐ#9Ð#9Ø�4à�4r$   c                 óT   — |                       ¦   «         \  }}|du r|du rdS |du rdS d S )NTFrì  rí  s      r%   Ú_eval_is_infinitezMul._eval_is_infiniteM  sI   € ð $(×#EÒ#EÑ#GÔ#GÑ ˆ	�=à˜DÐ Ð  Y°%Ð%7Ð%7Ø�4Ø˜eÐ#Ð#Ø�5à�4r$   c                 óš   — t          d„ | j        D ¦   «         d¬¦  «        }|r|S |du r t          d„ | j        D ¦   «         ¦  «        rdS d S d S )Nc              3   ó$   K  — | ]}|j         V — Œd S rC   )Úis_rationalrE   s     r%   rG   z(Mul._eval_is_rational.<locals>.<genexpr>]  s$   è è € Ð;Ð;¨A˜!œ-Ð;Ð;Ð;Ð;Ð;Ð;r$   TrÓ  Fc              3   ó(   K  — | ]}|j         d u V — ŒdS rŠ   rã  rE   s     r%   rG   z(Mul._eval_is_rational.<locals>.<genexpr>b  ó)   è è € Ð9Ð9¨!�1”9 Ð%Ð9Ð9Ð9Ð9Ð9Ð9r$   ©r   r+   rË  ©rI   r°   s     r%   Ú_eval_is_rationalzMul._eval_is_rational\  sr   € ÝÐ;Ð;°´Ð;Ñ;Ô;ÈÐMÑMÔMˆØð 	ØˆHØ�%ˆZˆZåÐ9Ð9¨t¬yÐ9Ñ9Ô9Ñ9Ô9ð Ø�uð ˆZðð r$   c                 óš   — t          d„ | j        D ¦   «         d¬¦  «        }|r|S |du r t          d„ | j        D ¦   «         ¦  «        rdS d S d S )Nc              3   ó$   K  — | ]}|j         V — Œd S rC   )Úis_algebraicrE   s     r%   rG   z)Mul._eval_is_algebraic.<locals>.<genexpr>f  s$   è è € Ð<Ð<¨Q˜!œ.Ð<Ð<Ð<Ð<Ð<Ð<r$   TrÓ  Fc              3   ó(   K  — | ]}|j         d u V — ŒdS rŠ   rã  rE   s     r%   rG   z)Mul._eval_is_algebraic.<locals>.<genexpr>k  rõ  r$   rö  r÷  s     r%   Ú_eval_is_algebraiczMul._eval_is_algebraice  sr   € ÝÐ<Ð<°$´)Ð<Ñ<Ô<ÈÐNÑNÔNˆØð 	ØˆHØ�%ˆZˆZåÐ9Ð9¨t¬yÐ9Ñ9Ô9Ñ9Ô9ð Ø�uð ˆZðð r$   c                 ój  ‡— |                       ¦   «         }|du rdS g }g }d}| j        D �]@}d}|j        r1t          |¦  «        t          j        ur|                     |¦  «         Œ=|j        rk|                     ¦   «         \  }}t          |¦  «        t          j        ur|                     |¦  «         |t          j        ur|                     |¦  «         Œ¯|j	        r‰| 
                    ¦   «         \  }	}
|	j        r|
j        sdx}}|
j        r?|                     |t          j        u rdnt          |t          j        ¦  «        ¦  «         �Œ%|s|
j        rJ ‚|
j        rJ ‚ d S  d S  d S |s|sdS d„ }d„ }d„ }ddlmŠ |s|rt'          ˆfd	„|D ¦   «         ¦  «        rdS |rd S  ||¦  «        r ||¦  «        rdS  ||¦  «        r	|dgk    rdS  ||¦  «        r! ||¦  «        rt)          |d
diŽdz
  j        rdS t+          |¦  «        dk    rE|d         }|j        r6|j        r/t1          d„ |D ¦   «         Ž t3          |j        ¦  «        z
  j        rdS t+          |¦  «        dk    rE|d         }|j        r8|j        r3t1          d„ |D ¦   «         Ž t3          |j        ¦  «        z
  j        rdS d S d S d S d S )NFTrW   c                 ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rC   )Úis_oddr­  s     r%   rG   z9Mul._eval_is_integer.<locals>.<lambda>.<locals>.<genexpr>š  s$   è è € Ð3Ð3¨A˜qœxÐ3Ð3Ð3Ð3Ð3Ð3r$   ©rË  ©rû   s    r%   rý   z&Mul._eval_is_integer.<locals>.<lambda>š  s   € �3Ð3Ð3°Ð3Ñ3Ô3Ñ3Ô3€ r$   c                 ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rC   ©Úis_evenr­  s     r%   rG   z9Mul._eval_is_integer.<locals>.<lambda>.<locals>.<genexpr>›  ó$   è è € Ð5Ð5¨a ¤	Ð5Ð5Ð5Ð5Ð5Ð5r$   r  r  s    r%   rý   z&Mul._eval_is_integer.<locals>.<lambda>›  ó   € �CÐ5Ð5°1Ð5Ñ5Ô5Ñ5Ô5€ r$   c                 ó4   — t          d„ | D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rC   r  r­  s     r%   rG   z9Mul._eval_is_integer.<locals>.<lambda>.<locals>.<genexpr>œ  r  r$   )r£   r  s    r%   rý   z&Mul._eval_is_integer.<locals>.<lambda>œ  r	  r$   r   )Úis_gtc              3   óD   •K  — | ]} ‰|t           j        ¦  «        V — Œd S rC   )r   r/   )rF   Ú_r  s     €r%   rG   z'Mul._eval_is_integer.<locals>.<genexpr>Ÿ  s@   øè è € ð 37ð 37Ø$%���a�œ‘”ð37ð 37ð 37ð 37ð 37ð 37r$   rY   r   c                 óP   — g | ]#}|j         ¯	|                     ¦   «         d          ‘Œ$S rj  ©r  rœ   r­  s     r%   r^   z(Mul._eval_is_integer.<locals>.<listcomp>±  s;   € ð 1ð 1ð 1°Ø&'¤ið1˜!Ÿ-š-™/œ/¨!Ô,ð 1ð 1ð 1r$   c                 óP   — g | ]#}|j         ¯	|                     ¦   «         d          ‘Œ$S rj  r  r­  s     r%   r^   z(Mul._eval_is_integer.<locals>.<listcomp>º  s;   € ð 3ð 3ð 3°Ø()¬	ð3˜!Ÿ-š-™/œ/¨!Ô,ð 3ð 3ð 3r$   )rø  r+   r¡   rÛ   r   r/   r3   r“   r¬   r�   rœ   rŸ   r›   rv   rR   r    rƒ   Ú
relationalr  rË  r4   r’   rž   r  rf   r   r§   Úis_nonnegative)rI   ró  Ú
numeratorsÚdenominatorsÚunknownr:   ÚhitrÑ   rj   rb   ri   ÚalloddÚallevenÚanyevenr  s                 @r%   Ú_eval_is_integerzMul._eval_is_integerq  sÒ  ø€ Ø×,Ò,Ñ.Ô.ˆØ˜%ÐÐØ�5àˆ
ØˆØˆØ”ð 	ñ 	ˆAØˆCØŒ|ð Ý�q‘6”6¥¤Ð&Ð&Ø×%Ò% aÑ(Ô(Ð(øØ”ð Ø×'Ò'Ñ)Ô)‘��1Ý�q‘6”6¥¤Ð&Ð&Ø×%Ò% aÑ(Ô(Ð(Ø�AœE�>�>Ø ×'Ò'¨Ñ*Ô*Ð*øØ”ð Ø—}’}‘”‘��1Ø”|ð )¨1¬<ð )Ø$(Ð(�C˜'Ø”=ð Ø ×'Ò'¨Qµ!´&¨[¨[¨¨Ý˜A�qœ}Ñ-Ô-ñ/ô /ð /ñ /àð à œ}Ð,Ð,Ð,à œyÐ(Ð(Ð(Ø�F�Fð �F�Fà��àð 	 Gð 	Ø�4à3Ð3ˆØ5Ð5ˆØ5Ð5ˆà%Ð%Ð%Ð%Ð%Ð%Øð 	˜lð 	­sð 37ð 37ð 37ð 37Ø)5ð37ñ 37ô 37ñ 07ô 07ð 	à�5Øð 		ØˆFØˆV�JÑÔð 	 G G¨LÑ$9Ô$9ð 	Ø�5ØˆW�ZÑ Ô ð 	 \°a°SÒ%8Ð%8Ø�4ØˆW�ZÑ Ô ð 	 V V¨Lñ &ô &ð 	Ý˜LÐ9°5Ð9Ð9¸AÑ=Üð	ð �5Ýˆ|ÑÔ Ò!Ð!Ø˜Q”ˆAØŒ|ð   ¤	ð  õ ð 1ð 1Ø"ð1ñ 1ô 1ð 2Ý4<¸Q¼S±M´MñBä(ð ð  ˜4Ýˆz‰?Œ?˜aÒÐØ˜1”ˆAØŒ|ð ! ¤	ð !õ ð 3ð 3Ø$ð3ñ 3ô 3ð 4Ý6>¸q¼s±m´mñDä%ð!ð !˜5ð  Ðð!ð !ð !ð !ð!ð !r$   c                 ó~   — t          d„ | j        D ¦   «         ¦  «        }|ot          d„ | j        D ¦   «         ¦  «        S )Nc              3   ó$   K  — | ]}|j         V — Œd S rC   )Úis_polar©rF   rA  s     r%   rG   z%Mul._eval_is_polar.<locals>.<genexpr>À  s$   è è € Ð:Ð:¨˜œÐ:Ð:Ð:Ð:Ð:Ð:r$   c              3   ó2   K  — | ]}|j         p|j        V — Œd S rC   )r  r    r  s     r%   rG   z%Mul._eval_is_polar.<locals>.<genexpr>Â  s+   è è € ÐEÐE°C�”Ð/ ¤ÐEÐEÐEÐEÐEÐEr$   )r£   r+   rË  )rI   Ú	has_polars     r%   Ú_eval_is_polarzMul._eval_is_polar¿  sK   € ÝÐ:Ð:°´	Ð:Ñ:Ô:Ñ:Ô:ˆ	Øð FÝÐEÐE¸4¼9ÐEÑEÔEÑEÔEð	Fr$   c                 ó,   — |                       d¦  «        S ©NT)Ú_eval_real_imagrÜ  s    r%   Ú_eval_is_extended_realzMul._eval_is_extended_realÄ  s   € Ø×#Ò# DÑ)Ô)Ð)r$   c                 óŒ  — d}d }| j         D ]�}|j        p|j        du r|j        du r dS |j        r| }Œ)|j        r9|s6|j        }|s|du r|}ŒB|r$t          d„ | j         D ¦   «         ¦  «        r dS  d S Œi|j        du r|r d S |}Œz|j        du r|r d S |}Œ‹ d S |r|j        du r|r|S |j        du r|s|S d S d S |du r|S |r|S d S )NFc              3   ó$   K  — | ]}|j         V — Œd S rC   r‹   rE   s     r%   rG   z&Mul._eval_real_imag.<locals>.<genexpr>Ö  s$   è è € Ð>Ð>¨q˜qœ{Ð>Ð>Ð>Ð>Ð>Ð>r$   T)r+   rß  rá  r„   rÙ   rƒ   rË  )rI   ÚrealÚzeroÚt_not_re_imra   Úzs         r%   r%  zMul._eval_real_imagÇ  s…  € ØˆØˆà”ð 	ð 	ˆAØ”Ð- ¤°%Ð7Ð7¸AÔ<NÐRWÐ<WÐ<WØ�u�uØ”ð Ø�x��ØÔ#ð Øð Øœ	�AØð  ¨  Ø ˜˜Øð ÝÐ>Ð>°D´IÐ>Ñ>Ô>Ñ>Ô>ð (Ø#' 4 4Ø˜˜øØÔ# uÐ,Ð,àð Ø�F�FØ��Ø” 5Ð(Ð(Øð Ø�F�FØ��à��àð 
	ØÔ+¨uÐ4Ð4Øð  Ø�KØÔ'¨5Ð0Ð0Øð  Ø�Kð 1Ð0ð ð  à�Uˆ]ˆ]ØˆKØð 	ØˆKð	ð 	r$   c                 ól   — t          d„ | j        D ¦   «         ¦  «        r|                      d¦  «        S d S )Nc              3   ó6   K  — | ]}|j         d u o|j        V — ŒdS rŠ   )rƒ   rŒ   rE   s     r%   rG   z)Mul._eval_is_imaginary.<locals>.<genexpr>ò  s0   è è € ÐEÐE°aˆqŒy˜EÐ!Ð1 a¤kÐEÐEÐEÐEÐEÐEr$   F)rË  r+   r%  rÜ  s    r%   Ú_eval_is_imaginaryzMul._eval_is_imaginaryñ  sA   € ÝÐEÐE¸4¼9ÐEÑEÔEÑEÔEð 	/Ø×'Ò'¨Ñ.Ô.Ð.ð	/ð 	/r$   c                 ó,   — |                       d¦  «        S r$  ©Ú_eval_herm_antihermrÜ  s    r%   Ú_eval_is_hermitianzMul._eval_is_hermitianõ  s   € Ø×'Ò'¨Ñ-Ô-Ð-r$   c                 ó,   — |                       d¦  «        S ©NFr1  rÜ  s    r%   Ú_eval_is_antihermitianzMul._eval_is_antihermitianø  s   € Ø×'Ò'¨Ñ.Ô.Ð.r$   c                 ó®   — | j         D ](}|j        �|j        € d S |j        rŒ|j        r| }Œ& d S |dur|S |                      ¦   «         }|rdS |du r|S d S rë  )r+   Úis_hermitianÚis_antihermitianrî  )rI   Úhermra   rƒ   s       r%   r2  zMul._eval_herm_antihermû  s˜   € Ø”ð 	ð 	ˆAØŒ~Ð%¨Ô);Ð)CØ��ØŒ~ð ØØÔ#ð Ø�x��à��à�uÐÐØˆKà×$Ò$Ñ&Ô&ˆØð 	Ø�4Ø˜ÐÐØˆKð Ðr$   c                 ó  — | j         D ]X}|j        }|rHt          | j         ¦  «        }|                     |¦  «         t	          d„ |D ¦   «         ¦  «        r dS  d S |€ d S ŒYt	          d„ | j         D ¦   «         ¦  «        rdS d S )Nc              3   óP   K  — | ]!}|j         ot          |j        ¦  «        d u V — Œ"dS )TN)ró  r   rƒ   ©rF   rû   s     r%   rG   z*Mul._eval_is_irrational.<locals>.<genexpr>  s8   è è € ÐXÐXÈA˜œÐ>­)°A´IÑ*>Ô*>À4ÐGÐXÐXÐXÐXÐXÐXr$   Tc              3   ó$   K  — | ]}|j         V — Œd S rC   )Úis_realr=  s     r%   rG   z*Mul._eval_is_irrational.<locals>.<genexpr>  s$   è è € Ð,Ð,˜QˆqŒyÐ,Ð,Ð,Ð,Ð,Ð,r$   F)r+   Úis_irrationalr.   ÚremoverË  )rI   ra   r:   Úotherss       r%   Ú_eval_is_irrationalzMul._eval_is_irrational  s°   € Ø”ð 		ð 		ˆAØ”ˆAØð Ý˜dœi™œ�Ø—’˜aÑ Ô Ð ÝÐXÐXÐQWÐXÑXÔXÑXÔXð  Ø˜4˜4Ø��ØˆyØ��ð åÐ,Ð, $¤)Ð,Ñ,Ô,Ñ,Ô,ð 	Ø�5ð	ð 	r$   c                 ó,   — |                       d¦  «        S )a‹  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_positivezMul._eval_is_extended_positive  s   € ð  ×!Ò! !Ñ$Ô$Ð$r$   c                 óJ  — dx}}| j         D ]~}|j        rŒ
|j        r| }Œ|j        r$t	          d„ | j         D ¦   «         ¦  «        r dS  d S |j        r| }d}ŒM|j        rd}ŒW|j        du r| }|r d S d}Œk|j        du r|r d S d}Œ| d S |dk    r
|du r|du rdS |dk     rdS d S )NFc              3   ó$   K  — | ]}|j         V — Œd S rC   r‹   rE   s     r%   rG   z$Mul._eval_pos_neg.<locals>.<genexpr>7  s$   è è € Ð6Ð6 q�q”{Ð6Ð6Ð6Ð6Ð6Ð6r$   Tr   r   )	r+   r|   rL   rƒ   rË  Úis_extended_nonpositiveÚis_extended_nonnegativer    rŸ   )rI   rØ   Úsaw_NONÚsaw_NOTra   s        r%   rF  zMul._eval_pos_neg/  s0  € Ø!Ð!ˆ�'Ø”ð 	ð 	ˆAØÔ%ð ØØÔ'ð Ø�u��Ø”ð ÝÐ6Ð6¨D¬IÐ6Ñ6Ô6Ñ6Ô6ð !Ø ˜5˜5Ø��ØÔ*ð Ø�u�Ø��ØÔ*ð Ø��ð ” %Ð'Ð'Ø�u�Øð Ø�F�FØ��Ø” %Ð'Ð'Øð Ø�F�FØ��à��Ø�1Š9ˆ9˜ EÐ)Ð)¨g¸Ð.>Ð.>Ø�4Ø�!Š8ˆ8Ø�5ð ˆ8r$   c                 ó,   — |                       d¦  «        S rz   rE  rÜ  s    r%   Ú_eval_is_extended_negativezMul._eval_is_extended_negativeR  s   € Ø×!Ò! "Ñ%Ô%Ð%r$   c                 óÀ  — |                       ¦   «         }|dur|S ddlm}  || ¦  «        \  }}|j        rP|j        rIt          d„ t                               |¦  «        D ¦   «         Ž t          |j	        ¦  «        z
  j
        rdS d S d\  }}| j        D ]K}t          |¦  «        t          j        u rŒ|j        r dS |du rn|dk    r||z   j        rd}n	|j        €d }|}ŒL|S )NTr   r$  c                 óP   — g | ]#}|j         ¯	|                     ¦   «         d          ‘Œ$S rj  r  r­  s     r%   r^   z$Mul._eval_is_odd.<locals>.<listcomp>_  ó;   € ð 3ð 3ð 3¨QØ()¬	ð3�a—m’m‘o”o aÔ(ð 3ð 3ð 3r$   F)Tr   r   )r  r*  r%  rž   r  rf   r4   r«   r   r§   r    r+   rÛ   r   r/   r  )rI   r¡   r%  rÑ   rj   r°   Úaccra   s           r%   Ú_eval_is_oddzMul._eval_is_oddU  s0  € Ø×*Ò*Ñ,Ô,ˆ
Ø˜TÐ!Ð!ØÐà3Ð3Ð3Ð3Ð3Ð3Øˆx˜‰~Œ~‰ˆˆ1ØŒ<ð 	˜AœIð 	õ ð 3ð 3Ý—M’M !Ñ$Ô$ð3ñ 3ô 3ð 4Ý6>¸q¼s±m´mñDä!ðð �uØˆFØ‰ˆˆ3Ø”ð 	ð 	ˆAÝ�1‰vŒv�œˆˆØØŒyð Ø�u�uØ�EˆzˆzØØ˜’�˜s Q™wÔ.�Ø��Ø”Ð"Ø�ØˆCˆCØˆr$   c                 óà   — ddl m}  || ¦  «        \  }}|j        rN|j        rIt	          d„ t
                               |¦  «        D ¦   «         Ž t          |j        ¦  «        z
  j	        rdS d S d S d S )Nr   r$  c                 óP   — g | ]#}|j         ¯	|                     ¦   «         d          ‘Œ$S rj  r  r­  s     r%   r^   z%Mul._eval_is_even.<locals>.<listcomp>z  rR  r$   F)
r*  r%  rž   r  rf   r4   r«   r   r§   r  )rI   r%  rÑ   rj   s       r%   Ú_eval_is_evenzMul._eval_is_evens  s¨   € Ø3Ð3Ð3Ð3Ð3Ð3Øˆx˜‰~Œ~‰ˆˆ1ØŒ<ð 	˜AœIð 	õ ð 3ð 3Ý—M’M !Ñ$Ô$ð3ñ 3ô 3ð 4Ý6>¸q¼s±m´mñDä$ðð �uð	ð 	ð 	ð 	ðð r$   c                 ón   — d}| j         D ]"}|j        r|j        s dS |dz
  j        r|dz  }Œ#|dk    rdS dS )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)r+   r¡   r    )rI   Únumber_of_argsrA  s      r%   Ú_eval_is_compositezMul._eval_is_composite  sf   € ð ˆØ”9ð 	$ð 	$ˆCØ”Nð  s¤ð Ø�t�tØ�A‘Ô"ð $Ø !Ñ#�øà˜AÒÐØ�4ð Ðr$   c           	      ó@  ‡(‡)‡*‡+‡,— ddl mŠ, ddlm} ddlmŠ+ ddlm} |j        sd S |j	        d         j
        rN|j	        d         dk     r=| j	        d         j
        r+| j	        d         dk     r|                      | | ¦  «        S d S d„ Š(ˆ(ˆ+fd„}ˆ(fd„}d	„ }d } || ¦  «        \  }	}
| }|
t          j        urR|	                     ||¦  «        |
                     ||¦  «        z  }|j        s|                     ||¦  «        S || k    r|}|j	        d         }|j	        d         }d }|j        r#|j        r||k    r|                     |¦  «        }n	|j        r|S  ||¦  «        \  Š)} ||¦  «        \  Š*}|rx|j        rqt!          |¦  «        d
k    r^t           |t!          |¦  «        |¦  «        ¦  «        }‰)                     |¦  «         |‰)v r‰)|xx         |z  cc<   n|‰)|<   |||z  z  }nd
}d}t%          |¦  «        t%          |¦  «        k    rd}n t%          ‰*¦  «        t%          ‰)¦  «        k    rd}n}d„ |D ¦   «                              d„ |D ¦   «         ¦  «        rd}nQt)          ‰*¦  «                             t)          ‰)¦  «        ¦  «        rd}nt+          ˆ)ˆ*ˆ,fd„‰*D ¦   «         ¦  «        rd}|s|S ‰*sd }n^g }‰*                     ¦   «         D ]8\  }}‰)|         }|                      |||¦  «        ¦  «         |d         s|c S Œ9t1          |¦  «        }|s1d }t3          t%          |¦  «        ¦  «        D ]} |||         Ž ||<   Œ�nd}t%          |¦  «        }|pt          j        }g }d}|�r�||z   t%          |¦  «        k    �rvd}g }t3          |¦  «        D ]é}|||z            d         ||         d         k    r �n|dk    r;|                      ||||z            d
         ||         d
         ¦  «        ¦  «         n}||d
z
  k    r;|                      ||||z            d
         ||         d
         ¦  «        ¦  «         n9|||z            d
         ||         d
         k    r �n_|                     d
¦  «         |d
z  }Œêt1          |¦  «        } | �r2|d
k    r]|rt1          || ¦  «        } t7          || ¦  «         |||         d         ||         d
         | |d         d
         z  z
  ¦  «        z  ||<   nÃd
}  |||         d         ||         d
         | |d         d
         z  z
  ¦  «        }!|}"||z   d
z
  }#||#         d         ||#         d
         | |d         d
         z  z
  f}$|$d
         r=||z   t%          |¦  «        k     r|!|"z  |$g||||z   …<   n% ||$Ž }$|!|"z  |$z  g||||z   …<   n|!|"z  g||||z   …<   || z  }|| z  }d}|s|                     |¦  «         |d
z  }|r||z   t%          |¦  «        k    �°v|s|S |                     t3          |t%          |¦  «        ¦  «        ¦  «         |D ]$} |||         Ž                      ||¦  «        ||<   Œ%|€|}%n|€|}%nt1          ||¦  «        }%g }&‰)D ]s}|‰*v r4‰)|         ‰*|         |%z  z
  }'|&                      |||'¦  «        ¦  «         Œ:|&                      ||                     ||¦  «        ‰)|         ¦  «        ¦  «         Œt|r|st7          ||¦  «        g|&z   }&| |j        |&Ž z   |j        |Ž z  S )Nr   r×   )Úmultiplicity)Ú	powdenestr$  c                 ó€   — ddl m} | j        st          | |¦  «        r|                      ¦   «         S | t
          j        fS )Nr   )rv  )Ú&sympy.functions.elementary.exponentialrv  r�   rˆ   rœ   r   r/   )r:   rv  s     r%   Úbase_expz Mul._eval_subs.<locals>.base_exp   sK   € ð CÐBÐBÐBÐBÐBØŒxð '�: a¨Ñ-Ô-ð 'Ø—}’}‘”Ð&Ø•a”e�8ˆOr$   c                 óv  •— t          t          ¦  «        g }}t                               | ¦  «        D ]„} ‰	|¦  «        } ‰|¦  «        \  }}|t          j        ur,|                     ¦   «         \  }}t          |||z  ¦  «        }|}|j        r||xx         |z  cc<   Œm| 	                    ||g¦  «         Œ…||fS )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   rL  r4   r«   r   r/   rP   rv   r"   r3   )
Úeqr;   r<   r:   rb   ri   r9   r  r`  r]  s
           €€r%   ÚbreakupzMul._eval_subs.<locals>.breakup©  sÇ   ø€ õ #¥3Ñ'Ô'¨�ˆQÝ—]’] 2Ñ&Ô&ð 
&ð 
&�Ø�I˜a‘L”L�Ø!˜ !™œ‘��AØ�AœE�>�>ØŸnšnÑ.Ô.‘G�R˜Ý˜A˜q ™t™œ�AØ�AØÔ#ð &Ø�a�D�D”D˜A‘I�D�D‘D�Dà—I’I˜q !˜fÑ%Ô%Ð%Ð%Ø�r�7ˆNr$   c                 óF   •—  ‰| ¦  «        \  } }t          | ||z  ¦  «        S )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.
            ru   )rb   r9   ri   r`  s      €r%   ÚrejoinzMul._eval_subs.<locals>.rejoin¾  s(   ø€ ð �X˜a‘[”[‰FˆQ�Ý�q˜!˜B™$‘<”<Ðr$   c                 óf   — |j         | j         z  r| j         |j         z  st          | |z  ¦  «        S dS )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¦   rL  )r:   rb   s     r%   ÚndivzMul._eval_subs.<locals>.ndivÈ  s7   € ð
 ”3˜œ‘9ð   A¤C¨!¬#¡Ið  Ý˜1˜Q™3‘x”x�Ø�1r$   r   TFc                 ó   — h | ]
}|d          ’ŒS rH  r#   r­  s     r%   rs   z!Mul._eval_subs.<locals>.<setcomp>  s   € Ð#Ð#Ð#�qˆa�ŒdÐ#Ð#Ð#r$   c                 ó   — h | ]
}|d          ’ŒS rH  r#   r­  s     r%   rs   z!Mul._eval_subs.<locals>.<setcomp>  s   € Ð/AÐ/AÐ/A¸°°!´Ð/AÐ/AÐ/Ar$   c              3   ó`   •K  — | ](} ‰‰|         ¦  «         ‰‰|         ¦  «        k    V — Œ)d S rC   r#   )rF   rb   r;   Úold_crØ   s     €€€r%   rG   z!Mul._eval_subs.<locals>.<genexpr>  s@   øè è € Ð=Ð=°!���a˜”d‘”˜t˜t E¨!¤H™~œ~Ò-Ð=Ð=Ð=Ð=Ð=Ð=r$   r{   )rÜ   rØ   Úsympy.ntheory.factor_r\  Úsympy.simplify.powsimpr]  r*  r%  r   r+   r    Ú_subsr   r/   r“   Úextract_multiplicativelyrÛ   r0   r’   Ú
differenceÚsetr£   re   r3   Úminr¢   r¤   rv   r2   r\  r  )-rI   rn  Únewr\  r%  rc  re  rg  r¯   rÑ   rj   Úself2Úco_selfÚco_oldÚco_xmulr<   Úold_ncr¡  Úco_residualÚokÚcdidÚratrb   Úold_eÚc_eÚncdidrÂ   ÚtakeÚlimitÚfailedr  rÌ   ÚndorW  ÚmidÚirr°   ÚdoÚmargsri   r`  r;   rk  r]  rØ   s-                                           @@@@@r%   Ú
_eval_subszMul._eval_subs�  sÕ  øøøøø€ Ø=Ð=Ð=Ð=Ð=Ð=Ø6Ð6Ð6Ð6Ð6Ð6Ø4Ð4Ð4Ð4Ð4Ð4Ø3Ð3Ð3Ð3Ð3Ð3àŒzð 	Ø�4ð Œ8�AŒ;Ô ð 	 S¤X¨a¤[°1¢_ _ØŒy˜Œ|Ô%ð Ø”9˜Q”< !Ò#Ð#ØŸ:š: s d¨S¨DÑ1Ô1Ð1Ø�tð	ð 	ð 	ð	ð 	ð 	ð 	ð 	ð 	ð*	 ð 	 ð 	 ð 	 ð 	 ð	ð 	ð 	ð ˆØˆx˜‰~Œ~‰ˆˆ1ØˆØ•A”Eˆ>ˆ>Ø—G’G˜C Ñ%Ô% a§g¢g¨c°3Ñ&7Ô&7Ñ7ˆEØ”<ð -Ø—{’{ 3¨Ñ,Ô,Ð,Ø˜Š}ˆ}Ø�ð ”*˜Q”-ˆØ”˜!”ˆØˆØÔð 	 'Ô"5ð 	ð ˜Ò Ð Ø!×:Ò:¸6ÑBÔB�øØÔð 	ØˆIð �'˜%‘.”.‰ˆˆBØ!˜' #™,œ,‰ˆ�ð ð 		�wÔ*ð 		­s°6©{¬{¸aÒ/?Ð/?Ý�\�\¥# f¡+¤+¨wÑ7Ô7Ñ8Ô8ˆDØ�EŠE�'‰NŒNˆNØ˜ˆ{ˆ{Ø�&�	�	”	˜TÑ!�	�	‘	�	à ��&‘	Ø! &¨$¡,Ñ.ˆKˆKàˆKð ˆÝˆv‰;Œ;�˜R™œÒ Ð àˆBˆBÝ�‰ZŒZ�#˜a™&œ&Ò Ð àˆBˆBØ#Ð#˜FÐ#Ñ#Ô#×.Ò.Ð/AÐ/A¸bÐ/AÑ/AÔ/AÑBÔBð 	àˆBˆBÝ�‰ZŒZ×"Ò"¥3 q¡6¤6Ñ*Ô*ð 	àˆBˆBÝÐ=Ð=Ð=Ð=Ð=Ð=°uÐ=Ñ=Ô=Ñ=Ô=ð 	àˆBØð 	ØˆIàð 		ØˆDˆDàˆCØ#Ÿkšk™mœmð ð ‘
��EØ˜”d�Ø—
’
˜4˜4  UÑ+Ô+Ñ,Ô,Ð,Ø˜2”wð Ø�I�I�Iðå�s‘8”8ˆDàð W	:ØˆEÝ�3˜r™7œ7‘^”^ð 'ð '�Ø˜  1¤˜��1‘�ñ'ð ˆEÝ�v‘;”;ˆDØÐ&�AœJˆEØˆFØˆAØñ M:˜A ™H­¨B©¬Ò/Ñ/Ø�ð �Ý˜t™œð 3#ð 3#�AØ˜!˜a™%”y ”| v¨a¤y°¤|Ò3Ð3Ø™Ø˜aš˜ØŸ
š
 4 4¨¨1¨q©5¬	°!¬°f¸Q´iÀ´lÑ#CÔ#CÑDÔDÐDÐDØ˜d Q™hš˜ØŸ
š
 4 4¨¨1¨q©5¬	°!¬°f¸Q´iÀ´lÑ#CÔ#CÑDÔDÐDÐDØ˜A ™Eœ 1œ¨°¬°1¬Ò5Ð5Ø™àŸ
š
 1™œ˜Ø˜‘F�A�Aå˜c™(œ(�CØñ %#Ø 1š9˜9Ø#ð 5Ý&)¨$°¡n¤n Ý$'¨¨S¡M¤M°&°&¸¸A¼¸q¼Ø$& q¤E¨!¤H¨s°6¸!´9¸Q´<Ñ/?Ñ$?ñ3Aô 3Añ %A˜B˜q™E˜Eð #$˜Cð !'  r¨!¤u¨Q¤x°°A´°q´¸CØ$*¨1¤I¨a¤Lñ=1ñ 21ñ !2ô !2˜Að
 #&˜Cð "# T¡¨A¡˜BØ!# B¤¨¤¨B¨r¬F°1¬I¸Ø!'¨¤¨A¤ñ9/ñ -/ð !0˜Aà  œtð 
9Ø#$ t¡8­c°"©g¬gÒ#5Ð#5Ø67¸±e¸Q°Z B q¨¨T© z¡N Nà(.¨°¨
 AØ67¸±e¸A±g°Y B q¨¨T© z¡N Nð
 34°C±%°  1 Q¨¡X :¡à ™˜Ø ™˜Ø"˜Øð %ð —M’M !Ñ$Ô$Ð$Ø�Q‘�ðC ð M:˜A ™H­¨B©¬Ò/Ñ/ðH ð Ø�Ið —’�e A¥s¨2¡w¤wÑ/Ô/Ñ0Ô0Ð0Øð :ð :�AØ"˜F B q¤E˜N×/Ò/°°SÑ9Ô9�B�q‘E�Eð ˆ<ØˆBˆBØˆ]ØˆBˆBå�U˜DÑ!Ô!ˆBàˆØð 	=ð 	=ˆAØ�Eˆzˆzð �a”D˜5 œ8 B™;Ñ&�Ø—’˜V˜V A q™\œ\Ñ*Ô*Ð*Ð*à—’˜V˜V A§F¢F¨3°Ñ$4Ô$4°a¸´dÑ;Ô;Ñ<Ô<Ð<Ð<Øð 	-˜ð 	-õ ˜˜d‘^”^Ð$ uÑ,ˆEØ˜:˜5œ: uÐ-Ñ-¨j¨e¬j¸"¨oÑ=Ð=r$   r   c                 ó.  ‡‡‡‡‡‡‡‡— ddl m} ddlmŠ ddlm} d„ Šg }	 | j        D ]M}|                     ‰¦  «        \  }	}
|	                     ‰¦  «        s| 	                    ||
f¦  «         ŒGt          ‚t          d„ |D ¦   «         ¦  «        Šg }|D ]q\  }} ‰‰‰z
  |j        r|ndz   ¦  «        }|                     ‰|‰‰¬¦  «        }|                     ¦   «         }|�||k     r‰||z
  z  Š| 	                    |¦  «         ŒrnÆ# t          t          t           |f$ r« t#          t          d	„ |D ¦   «         ¦  «        ¦  «        Š‰j        rt&          j        Šˆˆˆˆˆˆfd
„| j        D ¦   «         }ddlm}  | | j        |Ž                      ¦   «         dd¬¦  «        }|                     |¦  «        r| |‰‰z  ‰¦  «        z  }|cY S w xY wt&          j        }d„ |D ¦   «         }t3          |Ž D ]H}ˆˆfd„|D ¦   «         }t5          |Ž \  }}t          |¦  «        }|‰z
  j        r|t9          |Ž ‰|z  z  z  }ŒIˆfd„Š|                      ‰¦  «        rVddlm} ddl m!} 	  ‰| ‰¦  «        ‰k    s || ‰¦  «         ||‰¦  «        k    r| |‰‰z  ‰¦  «        z  }|S # |$ r Y nw xY w|| k    ri| |z
   "                    ‰d¦  «        t&          j        k    r0‰dk    r*|  #                    ‰‰‰¬¦  «        }|t&          j        k    r|S | |‰‰z  ‰¦  «        z  }|S )Nr   )Ú	PoleErrorr   )Úceiling)ÚOrderc                 óÐ   — |                       |¦  «        }|d                              |¦  «        r5	 |                      |¦  «        }n# t          $ r | t          j        fcY S w xY w|S rO   )Úas_coeff_exponentrú   ÚleadtermÚ
ValueErrorr   r–   )r/  rû   Últs      r%   Ú	coeff_expz$Mul._eval_nseries.<locals>.coeff_exp�  su   € Ø×'Ò'¨Ñ*Ô*ˆBØ�!Œu�yŠy˜‰|Œ|ð (ð(ØŸš qÑ)Ô)�B�BøÝ!ð (ð (ð (Ø¥¤˜<Ð'Ð'Ð'ð(øøøàˆIs   ²A ÁA#Á"A#c              3   ó@   K  — | ]}|d          j         ¯|d          V — ŒdS ©r   N©rç   ©rF   ra   s     r%   rG   z$Mul._eval_nseries.<locals>.<genexpr>°  s1   è è € Ð:Ð:˜a¨1¨Q¬4¬>Ð:�Q�q”TÐ:Ð:Ð:Ð:Ð:Ð:r$   ©rÑ   ÚlogxÚcdirc              3   ó@   K  — | ]}|d          j         ¯|d          V — ŒdS r”  r•  r–  s     r%   rG   z$Mul._eval_nseries.<locals>.<genexpr>¿  s1   è è € ÐBÐB a°1°Q´4´>ÐB˜Q˜qœTÐBÐBÐBÐBÐBÐBr$   c           	      óZ   •— g | ]'}|                      ‰ ‰‰‰z
  ¦  «        ‰‰¬ ¦  «        ‘Œ(S )r—  )Únseries)rF   ra   r™  r‹  r˜  rÑ   Ún0rû   s     €€€€€€r%   r^   z%Mul._eval_nseries.<locals>.<listcomp>Â  s9   ø€ Ð[Ð[Ð[ÈA�A—I’I˜a 7 7¨1¨R©4¡=¤=°tÀ$�IÑGÔGÐ[Ð[Ð[r$   )Úpowsimprv  T)Úcombiner
  c                 ó6   — g | ]}t          j        |¦  «        ‘ŒS r#   )rf   r«   )rF   r.  s     r%   r^   z%Mul._eval_nseries.<locals>.<listcomp>Ê  s"   € Ð:Ð:Ð:¨6•”˜vÑ&Ô&Ð:Ð:Ð:r$   c                 ó(   •— g | ]} ‰|‰¦  «        ‘ŒS r#   r#   )rF   r/  r’  rû   s     €€r%   r^   z%Mul._eval_nseries.<locals>.<listcomp>Í  s%   ø€ Ð8Ð8Ð8¨D�Y�Y˜t QÑ'Ô'Ð8Ð8Ð8r$   c                 ó8  •‡— | ‰u rt           j        S | j        rt           j        S | j        r!t          ˆˆfd„| j        D ¦   «         ¦  «        S | j        rt          ˆˆfd„| j        D ¦   «         Ž S | j	        r ‰| j
        ‰¦  «        | j        z  S t           j        S )Nc              3   ó0   •K  — | ]} ‰|‰¦  «        V — Œd S rC   r#   ©rF   r:   Ú
max_degreerû   s     €€r%   rG   z8Mul._eval_nseries.<locals>.max_degree.<locals>.<genexpr>Ù  s/   øè è € Ð<Ð<°˜:˜: a¨Ñ+Ô+Ð<Ð<Ð<Ð<Ð<Ð<r$   c                 ó(   •— g | ]} ‰|‰¦  «        ‘ŒS r#   r#   r¤  s     €€r%   r^   z9Mul._eval_nseries.<locals>.max_degree.<locals>.<listcomp>Û  s%   ø€ Ð>Ð>Ð>°!˜Z˜Z¨¨1Ñ-Ô-Ð>Ð>Ð>r$   )r   r/   Úis_Atomr–   r”   Úmaxr+   r   rf   r�   rw  rv  )ri   rû   r¥  s    `€r%   r¥  z%Mul._eval_nseries.<locals>.max_degreeÓ  s³   øø€ Ø�AˆvˆvÝ”u�ØŒyð Ý”v�ØŒxð =ÝÐ<Ð<Ð<Ð<Ð<°Q´VÐ<Ñ<Ô<Ñ<Ô<Ð<ØŒxð @ÝÐ>Ð>Ð>Ð>Ð>°q´vÐ>Ñ>Ô>Ð?Ð?ØŒxð 3Ø!�z !¤&¨!Ñ,Ô,¨Q¬UÑ2Ð2Ý”6ˆMr$   )ÚPolynomialError)Údegree©r˜  r™  )$r  rŠ  Ú#sympy.functions.elementary.integersr‹  Úsympy.series.orderrŒ  r+   r�  rú   r3   r�  rR  rç   rœ  ÚgetnÚNotImplementedErrorÚ	TypeErrorr   r  r   r–   rm  rž  r  rè   r   rN  rŸ   r4   Úis_polynomialÚsympy.polys.polyerrorsr©  Úsympy.polys.polytoolsrª  r\  Ú_eval_as_leading_term)rI   rû   rÑ   r˜  r™  rŠ  rŒ  Úordsra   r�   rv  Úfacsrê   Ún1r5  Únsrž  ÚresÚords2ÚfacÚords3ÚcoeffsÚpowersÚpowerr©  rª  r‘  r‹  r’  r¥  r�  s    ````                      @@@@r%   Ú_eval_nserieszMul._eval_nseries˜  s.  øøøøøøøø€ Ø'Ð'Ð'Ð'Ð'Ð'Ø?Ð?Ð?Ð?Ð?Ð?Ø,Ð,Ð,Ð,Ð,Ð,ð	ð 	ð 	ð ˆð	Ø”Yð %ð %�ØŸZšZ¨™]œ]‘
��sØ—y’y ‘|”|ð %Ø—K’K  C Ñ)Ô)Ð)Ð)å$Ð$åÐ:Ð: 4Ð:Ñ:Ô:Ñ:Ô:ˆBØˆDØð ð ‘��1Ø�W˜Q ™V¨A¬KÐ'> q q¸QÑ?Ñ@Ô@�Ø—I’I˜a 2¨D°t�IÑ<Ô<�Ø—V’V‘X”X�Ø�>Ø˜B’w�wØ˜R "™W™˜Ø—’˜A‘”��ðøõ Õ/µ¸IÐFð 	ð 	ð 	õ �ÐBÐB¨4ÐBÑBÔBÑBÔBÑCÔCˆBØÔ ð Ý”V�Ø[Ð[Ð[Ð[Ð[Ð[Ð[Ð[Ð[ÐQUÔQZÐ[Ñ[Ô[ˆDØ6Ð6Ð6Ð6Ð6Ð6Ø�'˜)˜$œ) TÐ*×1Ò1Ñ3Ô3¸UÈÐNÑNÔNˆCØ�wŠw�u‰~Œ~ð &Ø�u�u˜Q ™T 1‘~”~Ñ%�ØˆJˆJˆJð	øøøõ ŒfˆØ:Ð:°TÐ:Ñ:Ô:ˆå˜E�?ð 	/ð 	/ˆCØ8Ð8Ð8Ð8Ð8°CÐ8Ñ8Ô8ˆEÝ  %˜[‰NˆF�FÝ˜‘K”KˆEØ˜‘	Ô&ð /Ø•s˜F�| Q¨¡XÑ.Ñ.�øð	ð 	ð 	ð 	ð 	ð ×Ò˜aÑ Ô ð 		Ø>Ð>Ð>Ð>Ð>Ð>Ø4Ð4Ð4Ð4Ð4Ð4ðØ�:˜d AÑ&Ô&¨!Ò+Ð+¨v¨v°d¸A©¬À&À&ÈÈaÁ.Ä.Ò/PÐ/PØ˜5˜5  A¡ q™>œ>Ñ)�Cð �
øð #ð ð ð Ø�ðøøøð
 �$Š;ˆ;Ø�s‘
× Ò   AÑ&Ô&­!¬&Ò0Ð0°Q¸²U°UØ×/Ò/°¸À4Ð/ÑHÔH�Ø�œ’<�<Ø�JØ�5�5˜˜A™˜q‘>”>Ñ!ˆCØˆ
s%   ¡C$D ÄC G	ÇG	É<J ÊJ#Ê"J#c                 óB   ‡‡‡—  | j         ˆˆˆfd„| j        D ¦   «         Ž S )Nc                 ó@   •— g | ]}|                      ‰‰‰¬ ¦  «        ‘ŒS )r«  )Úas_leading_term)rF   ra   r™  r˜  rû   s     €€€r%   r^   z-Mul._eval_as_leading_term.<locals>.<listcomp>ô  s.   ø€ ÐYÐYÐYÈ!˜1×,Ò,¨Q°TÀÐ,ÑEÔEÐYÐYÐYr$   ©r  r+   )rI   rû   r˜  r™  s    ```r%   r´  zMul._eval_as_leading_termó  s1   øøø€ ØˆtŒyÐYÐYÐYÐYÐYÐYÈtÌyÐYÑYÔYÐZÐZr$   c                 ó4   —  | j         d„ | j        D ¦   «         Ž S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r#   )r  r–  s     r%   r^   z'Mul._eval_conjugate.<locals>.<listcomp>÷  s    € Ð<Ð<Ð<¨Q˜1Ÿ;š;™=œ=Ð<Ð<Ð<r$   rÄ  rÜ  s    r%   Ú_eval_conjugatezMul._eval_conjugateö  s"   € ØˆtŒyÐ<Ð<°$´)Ð<Ñ<Ô<Ð=Ð=r$   c                 óF   —  | j         d„ | j        d d d…         D ¦   «         Ž S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r#   )Ú	transposer–  s     r%   r^   z'Mul._eval_transpose.<locals>.<listcomp>ú  s    € ÐBÐBÐB¨Q˜1Ÿ;š;™=œ=ÐBÐBÐBr$   r{   rÄ  rÜ  s    r%   Ú_eval_transposezMul._eval_transposeù  s,   € ØˆtŒyÐBÐB°$´)¸D¸D¸b¸D´/ÐBÑBÔBÐCÐCr$   c                 óF   —  | j         d„ | j        d d d…         D ¦   «         Ž S )Nc                 ó6   — g | ]}|                      ¦   «         ‘ŒS r#   )Úadjointr–  s     r%   r^   z%Mul._eval_adjoint.<locals>.<listcomp>ý  s    € Ð@Ð@Ð@¨1˜1Ÿ9š9™;œ;Ð@Ð@Ð@r$   r{   rÄ  rÜ  s    r%   Ú_eval_adjointzMul._eval_adjointü  s,   € ØˆtŒyÐ@Ð@°´	¸$¸$¸B¸$´Ð@Ñ@Ô@ÐAÐAr$   c                 óÎ   — t           j        }g }| j        D ]D}|                     ||¬¦  «        \  }}||z  }|t           j        ur|                     |¦  «         ŒE| | j        |Ž fS )aU  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   r/   r+   Úas_content_primitiver3   r  )rI   rÑ  rÒ  Úcoefr+   r:   r;   r§   s           r%   rÓ  zMul.as_content_primitiveÿ  sw   € õ ŒuˆØˆØ”ð 	ð 	ˆAØ×)Ò)°'ÀÐ)ÑGÔG‰DˆAˆqØ�A‰IˆDØ�œˆ~ˆ~Ø—’˜A‘”�øð �Y�T”Y Ð%Ð%Ð%r$   c                 ón   ‡— |                       ¦   «         \  }}|                     ˆfd„¬¦  «         ||z   S )a  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                 ó0   •— |                       ‰¬¦  «        S )N)Úorder)Úsort_key)r+  r×  s    €r%   rý   z(Mul.as_ordered_factors.<locals>.<lambda>'  s   ø€  D§M¢M¸ MÑ$>Ô$>€ r$   r'   )r1   r)   )rI   r×  ÚcpartÚncparts    `  r%   Úas_ordered_factorszMul.as_ordered_factors  s>   ø€ ð Ÿš™œ‰ˆˆvØ�
Š
Ð>Ð>Ð>Ð>ˆ
Ñ?Ô?Ð?Ø�v‰~Ðr$   c                 óD   — t          |                      ¦   «         ¦  «        S rC   )rÿ   rÛ  rÜ  s    r%   Ú_sorted_argszMul._sorted_args*  s   € å�T×,Ò,Ñ.Ô.Ñ/Ô/Ð/r$   )F)Tr5  rC   rH  rO   )FT)Qr   r   r   Ú__doc__Ú	__slots__ÚtTupler   Ú__annotations__r   Ú
_args_typer   rH   ÚpropertyrD   rM   rS   ÚclassmethodrÓ   rà   rä   ræ   ró   r   rö   rP   rc   rÚ   Ústaticmethodr  r(  r6  rK  ra  rg  rd  rl  rm  r}  r~  r�  r‘  rc  r¶  r¬   rœ   rÇ  rÏ  rÖ  rÙ  Ú_eval_is_commutativerå  ré  rî  rð  rø  rý  r  r"  r&  r%  r/  r3  r6  r2  rC  rG  rF  rO  rT  rW  rZ  rˆ  rÀ  r´  rÇ  rË  rÏ  rÓ  rÛ  rÝ  Ú__classcell__)rX  s   @r%   r4   r4   [   sg  ø€ € € € € € ðDð DðJ €Ià
��s�Ô
ÐÐÑà€Fà€JØ%�~Ð&;ÈÐNÑNÔNÐàð1ð 1ñ „Xð1ð6ð 6ð 6ð
:ð :ð :ð ðI.ð I.ñ „[ðI.ðVð ð ð8 ð"ð "ñ „[ð"ðð ð ð  ð6ð 6ñ „Xð6ð ð9ð 9ñ „Wð9ð< Ø+/ð 
ð 
ð 
ð 
ñ „Wð
ðð ð ð ð 5:ð 5:ð 5:ð 5:ðn ð$ð $ñ „\ð$ð$)ð )ð )ðV ð	#ð 	#ñ „Wð	#ð ðð ð ð ñ „Wðð>ð ð ðð ð ð!ð !ð !ð !ð@ ðð ñ „\ðð ð(ð (ð (ñ „\ð(ðT ð<ð <ñ „\ð<ð ð2ð 2ñ „\ð2ðh ð&ð &ñ „\ð&ð ðEð Eñ „\ðEð
 ð',ð ',ñ „\ð',ðRð ð ð6ð 6ð 6ð%ð %ð %ðIð Ið IðPð Pð Pð-ð -ð -ðMð Mð Mð-ð -Ððð ð ðA(ð A(ð A(ðF
ð 
ð 
ð
ð 
ð 
ðð ð ðð ð ðL!ð L!ð L!ð\Fð Fð Fð
*ð *ð *ð(ð (ð (ðT/ð /ð /ð.ð .ð .ð/ð /ð /ðð ð ð(ð ð ð%ð %ð %ð$!ð !ð !ðF&ð &ð &ðð ð ð<
ð 
ð 
ðð ð ð"F>ð F>ð F>ðPYð Yð Yð Yðv[ð [ð [ð [ð>ð >ð >ðDð Dð DðBð Bð Bð&ð &ð &ð &ð4ð ð ð ð" ð0ð 0ñ „Xð0ð 0ð 0ð 0ð 0r$   r4   Úmulc                 ó8   — t          t          j        | |¦  «        S )a‹  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   Úoperatorrè  )r:   Ústarts     r%   rS  rS  1  s   € õ. •(”,  5Ñ)Ô)Ð)r$   TFc                 ó  ‡ — ‰ j         s|j         r‰ |c}Š n‰ |z  S |t          j        u r‰ S ‰ t          j        u r|S ‰ t          j        u r|s| S |j        r||sh‰ j        ra‰ j        dk    rVd„ |j        D ¦   «         }ˆ fd„|D ¦   «         }t          d„ |D ¦   «         ¦  «        rt          j
        d„ |D ¦   «         ¦  «        S t          ‰ |d¬¦  «        S |j        rƒt          |j        ¦  «        }|d         j         r2|dxx         ‰ z  cc<   |d         dk    r|                     d¦  «         n|                     d‰ ¦  «         t           
                    |¦  «        S ‰ |z  }|j         r#|j         st           
                    ‰ |f¦  «        }|S )	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                 ó6   — g | ]}|                      ¦   «         ‘ŒS r#   )rc   r­  s     r%   r^   z_keep_coeff.<locals>.<listcomp>s  s"   € Ð;Ð;Ð;¨�A—N’NÑ$Ô$Ð;Ð;Ð;r$   c                 ó:   •— g | ]\  }}t          |‰¦  «        |f‘ŒS r#   r[   )rF   r;   rê   r�   s      €r%   r^   z_keep_coeff.<locals>.<listcomp>t  s,   ø€ Ð@Ð@Ð@±4°1°a•[  EÑ*Ô*¨AÐ.Ð@Ð@Ð@r$   c              3   ó*   K  — | ]\  }}|j         V — Œd S rC   )rž   )rF   r;   r  s      r%   rG   z_keep_coeff.<locals>.<genexpr>u  s(   è è € Ð1Ð1¡D A q�1”<Ð1Ð1Ð1Ð1Ð1Ð1r$   c                 ón   — g | ]2}t                                |d          dk    r
|dd…         n|¦  «        ‘Œ3S )r   r   N)r4   r5   r­  s     r%   r^   z_keep_coeff.<locals>.<listcomp>v  sQ   € ð '>ð '>ð '>Ø34õ (+§~¢~Ø˜qœT QšY˜Y�A�a�b�b”E�E¨Añ(/ô (/ð '>ð '>ð '>r$   FrX   r   )r    r   r/   rR   r”   r“   r¦   r+   r£   rf   r5   r4   r   r.   r0   r6   )r�   ÚfactorsrÒ  rØ   r+   r‡  rê   s   `      r%   r\   r\   K  sÝ  ø€ ð6 Œ?ð !ØÔð 	!Ø" GˆNˆG�U�Uà˜‘=Ð Ø•!”%ÐÐØˆØ•”€~€~ØˆØ	•!”-Ð	Ð	¨Ð	ØˆxˆØ	Œð Øð 	?˜Ô*ð 	?¨u¬w¸!ª|¨|Ø;Ð;¨g¬lÐ;Ñ;Ô;ˆDØ@Ð@Ð@Ð@¸4Ð@Ñ@Ô@ˆDÝÐ1Ð1¨DÐ1Ñ1Ô1Ñ1Ô1ð ?Ý”~ð '>ð '>Ø8<ð'>ñ '>ô '>ñ ?ô ?ð ?å�5˜'¨EÐ2Ñ2Ô2Ð2Ø	Œð Ý�W”\Ñ"Ô"ˆØ�Œ8Ôð 	#Ø�!ˆHˆHŒH˜ÑˆHˆH‰HØ�QŒx˜1Š}ˆ}Ø—	’	˜!‘”�øà�LŠL˜˜EÑ"Ô"Ð"Ý�~Š~˜eÑ$Ô$Ð$à�'‰MˆØŒ;ð 	1˜wÔ0ð 	1Ý—’  wÐ/Ñ0Ô0ˆAØˆr$   c                 ó(   — d„ }t          | |¦  «        S )Nc                 ó”   ‡— | j         r?|                      ¦   «         \  Š}‰j        r!|j        rt	          ˆfd„|j        D ¦   «         Ž S | S )Nc                 ó   •— g | ]}‰|z  ‘ŒS r#   r#   )rF   Úrir;   s     €r%   r^   z+expand_2arg.<locals>.do.<locals>.<listcomp>�  s   ø€ Ð)@Ð)@Ð)@°2¨!¨B©$Ð)@Ð)@Ð)@r$   )r   rc   r    r”   Ú_unevaluated_Addr+   )ri   r°   r;   s     @r%   r†  zexpand_2arg.<locals>.do‰  s]   ø€ ØŒ8ð 	BØ—>’>Ñ#Ô#‰DˆAˆqØŒ{ð B˜qœxð BÝ'Ð)@Ð)@Ð)@Ð)@¸¼Ð)@Ñ)@Ô)@ÐAÐAØˆr$   r   )ri   r†  s     r%   Úexpand_2argr÷  ˆ  s#   € ðð ð õ �Q˜ÑÔÐr$   )r©   ru   )rf   rö  rj  )TF)4Útypingr   rà  Úcollectionsr   Ú	functoolsr   Ú	itertoolsr   rê  r   Úbasicr	   r
   Ú	singletonr   Ú
operationsr   r   Úcacher   Úintfuncr   r   Úlogicr   r   r+  r   Ú
parametersr   rD   r   Ú	traversalr   Úsympy.utilities.iterablesr   r   r,   r=   r4   rè  rS  r\   r÷  rî   r©   r¿  rv   Úaddrf   rö  r#   r$   r%   ú<module>r     sP  ðØ "Ð "Ð "Ð "Ð "Ð "Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€à Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø  Ð  Ð  Ð  Ð  Ð  Ø  Ð  Ð  Ð  Ð  Ð  à *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ñ ô ð ð!ð !ð !ð
3#ð 3#ð 3#ðlQ0ð Q0ð Q0ð Q0ð Q0ˆ$�ñ Q0ô Q0ð Q0ðf> Ð˜ÑÔ€ð*ð *ð *ð *ð4;ð ;ð ;ð ;ðzð ð ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &r$   