ó
    ‰*£h�©  ã                  óP  • S SK Jr  S SKJrJr  S SKJr  S SKJr  S SK	J
r
  SSKJr  SSKJr  SS	KJrJrJr  SS
KJr  SSKJrJr  SSKJr  SSKJrJr  SSKJr  SSKJ r   S SK!J"r"J#r#  \(       a  S SK$J%r%  S SK&J'r'  S r(S r)S r* " S S\\5      r+\" S5      r,SSK-J.r.J/r/J0r0  SSK1J2r2  g)é    )Úannotations)ÚTYPE_CHECKINGÚClassVar)Údefaultdict)Úreduce)Ú
attrgetteré   )Ú_args_sortkey)Úglobal_parameters)Ú_fuzzy_groupÚfuzzy_orÚ	fuzzy_not)ÚS)ÚAssocOpÚAssocOpDispatcher)Úcacheit)ÚilcmÚigcd)ÚExpr)ÚUndefinedKind)Úis_sequenceÚsift)ÚNumber©ÚOrderc                óØ   • [        S U R                   5       5      n[        U R                  5      U-
  nX!:”  a  gX!:  a  g[        U R	                  5       U * R	                  5       :  5      $ )Nc              3  óT   #   • U  H  nUR                  5       (       d  M  S v •  M      g7f)r	   N)Úcould_extract_minus_sign)Ú.0Úis     ÚK/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/core/add.pyÚ	<genexpr>Ú,_could_extract_minus_sign.<locals>.<genexpr>   s#   é € ð )¢9˜aØ×%Ñ%×'÷ ™¢9ùs   ‚(Ÿ	(FT)ÚsumÚargsÚlenÚboolÚsort_key)ÚexprÚnegative_argsÚpositive_argss      r!   Ú_could_extract_minus_signr,      se   € ô ñ ) 4§9¢9ó )ó )€Mä˜Ÿ	™	“N ]Ñ2€MØÓ$ØØ	Ó	&Øô �—‘“ D 5×"2Ñ"2Ó"4Ñ4Ó5Ð5ó    c                ó*   • U R                  [        S9  g )N©Úkey)Úsortr
   )r%   s    r!   Ú_addsortr2   (   s   € à‡I�I”-€IÒ r-   c                 ó–  • [        U 5      n / n[        R                  nU (       am  U R                  5       nUR                  (       a  U R                  UR                  5        O'UR                  (       a  X#-  nOUR                  U5        U (       a  Mm  [        U5        U(       a  UR                  SU5        [        R                  U5      $ )aA  Return a well-formed unevaluated Add: Numbers are collected and
put in slot 0 and args are sorted. Use this when args have changed
but you still want to return an unevaluated Add.

Examples
========

>>> from sympy.core.add import _unevaluated_Add as uAdd
>>> from sympy import S, Add
>>> from sympy.abc import x, y
>>> a = uAdd(*[S(1.0), x, S(2)])
>>> a.args[0]
3.00000000000000
>>> a.args[1]
x

Beyond the Number being in slot 0, there is no other assurance of
order for the arguments since they are hash sorted. So, for testing
purposes, output produced by this in some other function can only
be tested against the output of this function or as one of several
options:

>>> opts = (Add(x, y, evaluate=False), Add(y, x, evaluate=False))
>>> a = uAdd(x, y)
>>> assert a in opts and a == uAdd(x, y)
>>> uAdd(x + 1, x + 2)
x + x + 3
r   )Úlistr   ÚZeroÚpopÚis_AddÚextendr%   Ú	is_NumberÚappendr2   ÚinsertÚAddÚ
_from_args)r%   ÚnewargsÚcoÚas       r!   Ú_unevaluated_AddrA   -   s�   € ô: �‹:€DØ€GÜ	
�‰€BÞ
Ø�H‰H‹JˆØ�8�8ð �K‰K˜Ÿ™ÕØ�[�[Ø‰G‰Bà�N‰N˜1Ô÷ ˆ$ô ˆWÔÞ	Ø�‰�q˜"ÔÜ�>‰>˜'Ó"Ð"r-   c                  óD  ^ • \ rS rSr% SrSrSr\rS\	S'   \
(       a  SS.S?S jjr\S@S	 j5       r\SAS
 j5       r\S 5       r\S 5       rS r\S 5       rSBSCS jjrS r\S 5       rSDS jrS rSES jr\S 5       r\S 5       rSFS jrS rS r S r!S r"S r#S r$S r%S r&S  r'S! r(S" r)S# r*S$ r+S% r,S& r-S' r.S( r/S) r0S* r1S+ r2U 4S, jr3S- r4S. r5U 4S/ jr6S0 r7S1 r8S2 r9\SGS3 j5       r:SHS4 jr;S5 r<S6 r=S7 r>S8 r?S9 r@SIS: jrA\S; 5       rBS< rC\S= 5       rDU 4S> jrESrFU =rG$ )Jr<   é]   a¸  
Expression representing addition operation for algebraic group.

.. 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 ``Add()`` must be ``Expr``. Infix operator ``+``
on most scalar objects in SymPy calls this class.

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

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

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

2. Identity removing
    ``Add(x, 0, y)`` -> ``Add(x, y)``

3. Coefficient collecting by ``.as_coeff_Mul()``
    ``Add(x, 2*x)`` -> ``Mul(3, x)``

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

If no argument is passed, identity element 0 is returned. If single
element is passed, that element is returned.

Note that ``Add(*args)`` is more efficient than ``sum(args)`` because
it flattens the arguments. ``sum(a, b, c, ...)`` recursively adds the
arguments as ``a + (b + (c + ...))``, which has quadratic complexity.
On the other hand, ``Add(a, b, c, d)`` does not assume nested
structure, making the complexity linear.

Since addition is group operation, every argument should have the
same :obj:`sympy.core.kind.Kind()`.

Examples
========

>>> from sympy import Add, I
>>> from sympy.abc import x, y
>>> Add(x, 1)
x + 1
>>> Add(x, x)
2*x
>>> 2*x**2 + 3*x + I*y + 2*y + 2*x/5 + 1.0*y + 1
2*x**2 + 17*x/5 + 3.0*y + I*y + 1

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

>>> Add(1, 2, evaluate=False)
1 + 2
>>> Add(x, x, evaluate=False)
x + x

``Add()`` also represents the general structure of addition operation.

>>> from sympy import MatrixSymbol
>>> A,B = MatrixSymbol('A', 2,2), MatrixSymbol('B', 2,2)
>>> expr = Add(x,y).subs({x:A, y:B})
>>> expr
A + B
>>> type(expr)
<class 'sympy.matrices.expressions.matadd.MatAdd'>

Note that the printers do not display in args order.

>>> Add(x, 1)
x + 1
>>> Add(x, 1).args
(1, x)

See Also
========

MatAdd

© TzClassVar[Expr]Úidentity©Úevaluatec               ó   • g ©NrD   )ÚclsrG   r%   s      r!   Ú__new__ÚAdd.__new__¾   s   € Ør-   c                ó   • g rI   rD   ©Úselfs    r!   r%   ÚAdd.argsÁ   s   € àr-   c           	     óJ  ^^• SSK Jn  SSKJn  SSKJnJn  Sn[        U5      S:X  aj  Uu  pxUR                  (       a  X‡p‡UR                  (       a  UR                  (       a  Xx// S4nU(       a$  [        S US    5       5      (       a  U$ / US   S4$ 0 n	[        R                  n
/ n/ nU GHL  mTR                  (       ak  TR                  R                  (       a  M2  [!        U4S jU 5       5      (       a  MN  U Vs/ s H  nTR#                  U5      (       a  M  UPM     nnT/U-   nM€  TR$                  (       a«  T[        R&                  L d"  U
[        R(                  L a,  TR*                  S	L a  U(       d  [        R&                  // S4s  $ U
R$                  (       d  [-        X¢5      (       a5  U
T-  n
U
[        R&                  L a  U(       d  [        R&                  // S4s  $ GM<  [-        TU5      (       a  TR/                  U
5      n
GMa  [-        TU5      (       a  UR1                  T5        GM†  [-        TU5      (       a  U" TU
5      R3                  S	S
9n
GM°  T[        R(                  L a?  U
R*                  S	L a  U(       d  [        R&                  // S4s  $ [        R(                  n
GM  TR4                  (       a   TR6                  nUR9                  U5        GM3  TR                  (       a  TR;                  5       u  nnO¤TR<                  (       a�  TR?                  5       u  nnUR$                  (       aJ  UR@                  (       d"  UR                  (       a(  URB                  (       a  UR1                  UU-  5        GM×  [        RD                  TnnO[        RD                  nTnUU	;   aF  U	U==   U-  ss'   U	U   [        R&                  L a   U(       d  [        R&                  // S4s  $ GME  GMH  XùU'   GMO     / nS	nU	RG                  5        Hß  u  nnUR                  (       a  M  U[        RD                  L a  UR1                  U5        O‡UR                  (       a/  URH                  " U4UR6                  -   6 nUR1                  U5        OGUR4                  (       a  UR1                  [K        UUS	S95        OUR1                  [K        UU5      5        U=(       d    URL                  (       + nMá     U
[        RN                  L a9  U Vs/ s H+  nURP                  (       a  M  URR                  (       a  M)  UPM-     nnOKU
[        RT                  L a8  U Vs/ s H+  nURV                  (       a  M  URR                  (       a  M)  UPM-     nnU
[        R(                  L a1  U Vs/ s H$  oÿR*                  (       a  URX                  b  M"  UPM&     nnU(       an  / nU H0  m[!        U4S jU 5       5      (       a  M  UR1                  T5        M2     UU-   nU H+  mTR#                  U
5      (       d  M  [        R                  n
  O   [[        U5        U
[        R                  La  UR]                  SU
5        U(       a  UU-  nSnU(       a  / US4$ U/ S4$ s  snf s  snf s  snf s  snf )a=  
Takes the sequence "seq" of nested Adds and returns a flatten list.

Returns: (commutative_part, noncommutative_part, order_symbols)

Applies associativity, all terms are commutable with respect to
addition.

NB: the removal of 0 is already handled by AssocOp.__new__

See Also
========

sympy.core.mul.Mul.flatten

r   )ÚAccumBounds)Ú
MatrixExpr)ÚTensExprÚTensAddNé   c              3  ó8   #   • U  H  oR                   v •  M     g 7frI   ©Úis_commutative)r   Úss     r!   r"   ÚAdd.flatten.<locals>.<genexpr>ã   s   é € Ð7²¨A×'Ö'²ùó   ‚c              3  óD   >#   • U  H  oR                  T5      v •  M     g 7frI   ©Úcontains)r   Úo1Úos     €r!   r"   r[   ù   s   øé € Ð>²¨"—{‘{ 1—~�~²ùó   ƒ F©ÚdeeprF   c              3  óD   >#   • U  H  oR                  T5      v •  M     g 7frI   r^   )r   ra   Úts     €r!   r"   r[   ~  s   øé € Ð@²-¨QŸ:™: aŸ=˜=²-ùrb   T)/Ú!sympy.calculus.accumulationboundsrR   Úsympy.matrices.expressionsrS   Úsympy.tensor.tensorrT   rU   r&   Úis_RationalÚis_MulÚallr   r5   Úis_Orderr)   Úis_zeroÚanyr_   r9   ÚNaNÚComplexInfinityÚ	is_finiteÚ
isinstanceÚ__add__r:   Údoitr7   r%   r8   Úas_coeff_MulÚis_PowÚas_base_expÚ
is_IntegerÚis_negativeÚOneÚitemsÚ_new_rawargsÚMulrY   ÚInfinityÚis_extended_nonnegativeÚis_realÚNegativeInfinityÚis_extended_nonpositiveÚis_extended_realr2   r;   )rJ   ÚseqrR   rS   rT   rU   Úrvr@   ÚbÚtermsÚcoeffÚorder_factorsÚextrar`   Úo_argsÚcrZ   ÚeÚnewseqÚnoncommutativeÚcsÚfÚnewseq2ra   rf   s                          @@r!   ÚflattenÚAdd.flattenÅ   s)  ù€ õ$ 	BÝ9ß9ØˆÜˆs‹8�q‹=Ø‰DˆAØ�}�}Ø�1Ø�}�}Ø—8—8Ø˜  TÐ)�BÞÜÑ7°°A²Ó7×7Ñ7Ø�IØ˜2˜a™5 $�Ð&ð %'ˆô —f‘fˆà%'ˆà"$ˆäˆAð �z�zØ—6‘6—>—>ÙÜÔ>±Ó>×>Ñ>ÙÙ.;Ó Rªm¨À1Ç:Á:ÈbÇ>§©m�Ð RØ!"  mÑ 3�Ùð ——ØœŸ™’J %¬1×+<Ñ+<Ò"<ØŸ™ uÒ,¶eäŸE™E˜7 B¨Ð,Ò,Ø—?—?¤j°×&DÑ&DØ˜Q‘J�EØ¤§¡’~®eä !§¡˜w¨¨DÐ0Ò0Úä˜A˜{×+Ñ+ØŸ	™	 %Ó(�Úä˜A˜z×*Ñ*à—‘˜Q”Úä˜A˜x×(Ñ(Ù  5Ó)×.Ñ.°EÐ.Ð:�Úà”a×'Ñ'Ò'Ø—?‘? eÒ+¶EäŸE™E˜7 B¨Ð,Ò,Ü×)Ñ)�Úð ——à+,¯6©6�Ø—
‘
˜6Ô"Úð ——Ø—~‘~Ó'‘�‘1ð ——Ø—}‘}“‘��1Ø—;—; A§L§LØ$%§M§M°a·m·mØ—J‘J˜q !™tÔ$ÚÜ—u‘u˜a�1��1ô —E‘E�Ø�ð �E‹zØ�a“˜A‘“Ø˜‘8œqŸu™uÒ$®UäŸE™E˜7 B¨Ð,Ò,ò .3Ò$ð �a”ñg ðn ˆØˆØ—K‘K–M‰DˆAˆqà�y�yÙà”a—e‘e’Ø—‘˜aÕ ð —8—8ð Ÿš¨1¨$°·±©-Ð9�BØ—M‘M "Õ%Ø—X—Xà—M‘M¤# a¨°UÑ";Õ<ð —M‘M¤# a¨£)Ô,à+×C°1×3CÑ3CÔ/CŠNñ1 "ð6 ”A—J‘JÒÙ!'ÓX¢˜A°×0IÕ0I“aÈQÏYÍY—a¡ˆFÐXˆFà”a×(Ñ(Ò(Ù!'ÓX¢˜A°×0IÕ0I“aÈQÏYÍY—a¡ˆFÐXà”A×%Ñ%Ò%ñ "(ó Q¢˜A··Ø01×0BÑ0B÷ ¡ˆFð Qö ØˆGÛ�äÔ@±-Ó@×@Ó@Ø—N‘N 1Ö%ñ ð ˜}Ñ,ˆFã"�Ø—:‘:˜e×$Ó$ÜŸF™F�EÙñ #ô 	�Ôð œŸ™ÒØ�M‰M˜!˜UÔ#æØ�e‰OˆFØ!ˆNö Ø�v˜tÐ#Ð#à˜2˜tÐ#Ð#ùòw !SùòZ Yùò YùòQs<   Ã<ZÄZÔ	ZÔ"ZÔ5ZÕZÕ.ZÖZÖ !Z ×Z c                ó    • SSU R                   4$ )Né   r	   )Ú__name__)rJ   s    r!   Ú	class_keyÚAdd.class_key˜  s   € à�!�S—\‘\Ð!Ð!r-   c                ó’   • [        S5      n[        XR                  5      n[        U5      n[	        U5      S:w  a  [
        nU$ Uu  nU$ )NÚkindr	   )r   Úmapr%   Ú	frozensetr&   r   )rO   ÚkÚkindsÚresults       r!   rœ   ÚAdd.kindœ  sK   € ä�vÓˆÜ�A—y‘yÓ!ˆÜ˜%Ó ˆÜˆu‹:˜‹?ô #ˆFð ˆð ‰GˆFØˆr-   c                ó   • [        U 5      $ rI   )r,   rN   s    r!   r   ÚAdd.could_extract_minus_sign©  s   € Ü(¨Ó.Ð.r-   c                ó>  ^• T(       a5  [        U R                  U4S jSS9u  p#U R                  " U6 [        U5      4$ U R                  S   R	                  5       u  pEU[
        R                  La  XEU R                  SS -   4$ [
        R                  U R                  4$ )a  
Returns a tuple (coeff, args) where self is treated as an Add and coeff
is the Number term and args is a tuple of all other terms.

Examples
========

>>> from sympy.abc import x
>>> (7 + 3*x).as_coeff_add()
(7, (3*x,))
>>> (7*x).as_coeff_add()
(0, (7*x,))
c                ó"   >• U R                   " T6 $ rI   )Úhas_free)ÚxÚdepss    €r!   Ú<lambda>Ú"Add.as_coeff_add.<locals>.<lambda>¼  s   ø€ ¨q¯zªz¸4Ñ/@r-   T)Úbinaryr   r	   N)r   r%   r}   ÚtupleÚas_coeff_addr   r5   )rO   r©   Úl1Úl2r‰   Únotrats    `    r!   r®   ÚAdd.as_coeff_add¬  s†   ø€ ö Ü˜$Ÿ)™)Ô%@ÈÑN‰FˆBØ×$Ò$ bÐ)¬5°«9Ð4Ð4ØŸ	™	 !™×1Ñ1Ó3‰ˆØœŸ™ÒØ 4§9¡9¨Q¨R =Ñ0Ð0Ð0Ü�v‰v�t—y‘yÐ Ð r-   c                óÒ   • U R                   S   U R                   SS pCUR                  (       a  U(       a  UR                  (       a  X0R                  " U6 4$ [        R
                  U 4$ )z5
Efficiently extract the coefficient of a summation.
r   r	   N)r%   r9   rj   r}   r   r5   )rO   Úrationalr©   r‰   r%   s        r!   Úas_coeff_AddÚAdd.as_coeff_AddÃ  sP   € ð —i‘i ‘l D§I¡I¨a¨b Mˆtà�?�?¦8¨u×/@×/@Ø×+Ò+¨TÐ2Ð2Ð2Ü�v‰v�tˆ|Ðr-   c                óŠ  • SSK Jn  SSKJn  [	        U R
                  5      S:X  Ga	  [        S U R
                   5       5      (       aè  UR                  SL aØ  U" U[        R                  5      SL a¾  U R
                  u  pEUR                  [        R                  5      (       a  XTpTUR                  [        R                  5      nU(       ad  UR                  (       aS  UR                  (       aB  UR                  (       a  [        R                  $ UR                  (       a  [        R                   $ g UR"                  (       Ga  U R$                  (       að  U" U 5      nU(       aà  Uu  p‰UR&                  S:X  aš  SSKJn
  U
" US-  U	S-  -   5      nUR"                  (       aq  SS	KJn  SS
KJn  SSKJn  U
" U" X¸-
  S-  5      5      UR8                  -  nXþ" X¸-   [;        U	5      -  U" U	5      [        R                  -  -   UR8                  -  5      -  $ g US:X  a+  [=        X‰[        R                  -  -
  SUS-  U	S-  -   -  5      $ g g g g )Nr	   )Úpure_complex)Úis_eqrV   c              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Úis_infinite)r   Ú_s     r!   r"   Ú"Add._eval_power.<locals>.<genexpr>Ô  s   é € Ð&Hºi¸§}¦}ºiùr\   Fr   )Úsqrt)Úfactor_terms)Úsign)Úexpand_multinomialéÿÿÿÿ)Úevalfr¸   Ú
relationalr¹   r&   r%   ro   rn   r   r{   r‰   ÚImaginaryUnitr„   Úis_extended_negativer5   Úis_extended_positiverq   rj   Ú	is_numberÚqÚ(sympy.functions.elementary.miscellaneousr¾   Ú	exprtoolsr¿   Ú$sympy.functions.elementary.complexesrÀ   ÚfunctionrÁ   ÚpÚabsÚ_unevaluated_Mul)rO   Úexptr¸   r¹   r@   r‡   ÚicoÚriÚrr    r¾   ÚDr¿   rÀ   rÁ   Úroots                   r!   Ú_eval_powerÚAdd._eval_powerÑ  sÆ  € Ý'Ý%Üˆt�y‰y‹>˜QÔ¤3Ñ&H¸d¿iºiÓ&H×#HÑ#HØ�|‰|˜uÒ$©¨t´Q·U±UÓ);¸uÒ)Dà—y‘y‘�Ø—7‘7œ1Ÿ?™?×+Ñ+Ø�qØ—g‘gœaŸo™oÓ.�Þ˜3×/×/°A×4F×4FØ×0×0Ü Ÿv™v˜Ø×0×0Ü ×0Ñ0Ð0ØØ××Ð §§Ù˜dÓ#ˆBÞØ‘�Ø—6‘6˜Q“;ÝMÙ˜Q ™T A q¡D™[Ó)�AØ—}—}Ý;ÝMÝ@á#¡L°!±%¸±Ó$;Ó<¸d¿f¹fÑD˜Ø#Ð$6à™U¤C¨£F™N©T°!«W´Q·_±_Ñ-DÑDÀtÇvÁvñ8Nó %Oñ  Oð Oð %ð ˜R“ZÜ+ØœaŸo™oÑ-Ñ-Ø˜1˜a™4 ! Q¡$™;™ó)ð )ð  ð ð !/Ðr-   c                ó|   • U R                   " U R                   Vs/ s H  o"R                  U5      PM     sn6 $ s  snf rI   )Úfuncr%   Údiff)rO   rZ   r@   s      r!   Ú_eval_derivativeÚAdd._eval_derivativeö  s-   € à�yŠy¨d¯iªiÓ8ªi¨Ÿ6™6 !ž9©iÑ8Ð9Ð9ùÒ8s   ›9c           
     ó|   • U R                    Vs/ s H  oUR                  XX4S9PM     nnU R                  " U6 $ s  snf )N©ÚnÚlogxÚcdir)r%   ÚnseriesrÚ   )rO   r¨   rà   rá   râ   rf   rˆ   s          r!   Ú_eval_nseriesÚAdd._eval_nseriesú  s:   € ØBFÇ)Â)ÓLÂ)¸Q—‘˜1¨�Ó8Á)ˆÐLØ�yŠy˜%Ð Ð ùò Ms   �9c                ót   • U R                  5       u  p4[        U5      S:X  a  US   R                  X-
  U5      $ g )Nr	   r   )r®   r&   Úmatches)rO   r)   Ú	repl_dictr‰   rˆ   s        r!   Ú_matches_simpleÚAdd._matches_simpleþ  s9   € à×(Ñ(Ó*‰ˆÜˆu‹:˜‹?Ø˜‘8×#Ñ# D¡L°)Ó<Ð<Ør-   c                ó&   • U R                  XU5      $ rI   )Ú_matches_commutative)rO   r)   rè   Úolds       r!   rç   ÚAdd.matches  s   € Ø×(Ñ(¨¸#Ó>Ð>r-   c                ó\  ^• SSK Jn  [        R                  [        R                  4nU R
                  " U6 (       d  UR
                  " U6 (       a·  SSKJn  U" S5      m[        R                  T[        R                  T* 0nUR                  5        VVs0 s H  u  pgXv_M	     nnnU R                  U5      UR                  U5      -
  n	U	R                  T5      (       a  U	R                  U4S jS 5      n	U	R                  U5      n
OX-
  n
U" U
5      nUR                  (       a  U$ U
$ s  snnf )zX
Returns lhs - rhs, but treats oo like a symbol so oo - oo
returns 0, instead of a nan.
r   )Úsignsimpr	   )ÚDummyÚooc                óF   >• U R                   =(       a    U R                  TL $ rI   )rw   Úbase)r¨   rò   s    €r!   rª   Ú&Add._combine_inverse.<locals>.<lambda>  s   ø€ ˜aŸh™h×7¨1¯6©6°R¨<Ð7r-   c                ó   • U R                   $ rI   )rô   )r¨   s    r!   rª   rõ     s   € ˜aŸfšfr-   )Úsympy.simplify.simplifyrð   r   r   r‚   ÚhasÚsymbolrñ   r|   ÚxreplaceÚreplacer9   )ÚlhsÚrhsrð   Úinfrñ   ÚrepsrŸ   ÚvÚirepsÚeqr†   Úsrvrò   s               @r!   Ú_combine_inverseÚAdd._combine_inverse  sí   ø€ õ 	5Ü�z‰zœ1×-Ñ-Ð.ˆØ�7Š7�CŽ=˜CŸGšG SžMÝ%Ù�t“ˆBä—
‘
˜BÜ×"Ñ" R Cð)ˆDð '+§j¡j¤lÔ3¢l™d˜a�Q’T¡lˆEÑ3Ø—‘˜dÓ# c§l¡l°4Ó&8Ñ8ˆBØ�v‰v�b�z‰zØ—Z‘ZÜ7Ù$ó&�ð —‘˜UÓ#‰Bà‘ˆBÙ�r‹lˆØ—m—mˆsÐ+¨Ð+ùó 4s   ÂD(c                óX   • U R                   S   U R                  " U R                   SS 6 4$ )aú  Return head and tail of self.

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

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

>>> from sympy.abc import x, y
>>> (3*x - 2*y + 5).as_two_terms()
(5, 3*x - 2*y)
r   r	   N)r%   r}   rN   s    r!   Úas_two_termsÚAdd.as_two_terms"  s,   € ð$ �y‰y˜‰|˜T×.Ò.°·	±	¸!¸"°Ð>Ð>Ð>r-   c                óÔ  • U R                  5       u  p[        U[        5      (       d  [        XSS9R	                  5       $ UR	                  5       u  p4[        [        5      nUR                   H(  nUR	                  5       u  pxXX   R                  U5        M*     [        U5      S:X  aF  UR                  5       u  pšU R                  " U
 Vs/ s H  n[        X75      PM     sn6 [        XI5      4$ UR                  5        V	V
s0 s H)  u  pšU	[        U
5      S:”  a  U R                  " U
6 OU
S   _M+     nn	n
[        [        UR                  5       5      6  Vs/ s H  n[        U5      PM     snu  pÞU R                  " [!        [        U5      5       Vs/ s H  n[        USU Xì   /-   XÜS-   S -   6 PM     sn6 [        U6 pš[        X:5      [        XI5      4$ s  snf s  sn
n	f s  snf s  snf )a  
Decomposes an expression to its numerator part and its
denominator part.

Examples
========

>>> from sympy.abc import x, y, z
>>> (x*y/z).as_numer_denom()
(x*y, z)
>>> (x*(y + 1)/y**7).as_numer_denom()
(x*(y + 1), y**7)

See Also
========

sympy.core.expr.Expr.as_numer_denom
FrF   r	   r   N)Ú	primitivers   r<   r~   Úas_numer_denomr   r4   r%   r:   r&   ÚpopitemrÚ   Ú_keep_coeffr|   ÚzipÚiterÚrange)rO   Úcontentr)   ÚnconÚdconÚndr’   ÚniÚdiÚdrà   Únd2r    ÚdenomsÚnumerss                  r!   r  ÚAdd.as_numer_denom6  sÃ  € ð( Ÿ™Ó(‰ˆÜ˜$¤×$Ñ$Ü�w¨uÑ5×DÑDÓFÐFØ×+Ñ+Ó-‰
ˆô œÓˆØ—”ˆAØ×%Ñ%Ó'‰FˆBØ‰F�M‰M˜"Öñ ô
 ˆr‹7�a‹<Ø—:‘:“<‰DˆAØ—9’9Ù23Ó4²!¨B”+˜dÖ'±!Ñ4ð6Ü7BÀ4Ó7KðLð Lð EGÇHÁHÄJÔOÂJ¹D¸Aˆq¤3 q£6¨A£:�$—)’)˜Q‘-°1°Q±4Ò7ÁJˆÑOô ,/´°S·Y±Y³[Ó0AÑ+BÓCÒ+B aœ$˜qž'Ñ+BÑC‰ˆØ�yŠyÜ!¤# f£+Ô.ó0Ú.�qô  ¨¨ ¨v©y¨kÑ!9¸FÀqÁ5À6¸NÑ!JÓLÙ.ñ0ð 1Ü25°v°,ð ô ˜4Ó#¤[°Ó%9Ð9Ð9ùò 5ùó Pùò Dùò0s   Ã
GÄ0GÅG Æ#G%c                óB   ^• [        U4S jU R                   5       5      $ )Nc              3  óD   >#   • U  H  oR                  T5      v •  M     g 7frI   )Ú_eval_is_polynomial©r   ÚtermÚsymss     €r!   r"   Ú*Add._eval_is_polynomial.<locals>.<genexpr>f  s   øé € ÐHºi°d×+Ñ+¨D×1Ð1ºiùrb   ©rl   r%   ©rO   r!  s    `r!   r  ÚAdd._eval_is_polynomiale  s   ø€ ÜÔH¸d¿iºiÓHÓHÐHr-   c                óB   ^• [        U4S jU R                   5       5      $ )Nc              3  óD   >#   • U  H  oR                  T5      v •  M     g 7frI   )Ú_eval_is_rational_functionr  s     €r!   r"   Ú1Add._eval_is_rational_function.<locals>.<genexpr>i  s   øé € ÐOÂY¸T×2Ñ2°4×8Ð8ÂYùrb   r#  r$  s    `r!   r(  ÚAdd._eval_is_rational_functionh  s   ø€ ÜÔOÀTÇYÂYÓOÓOÐOr-   c                óD   ^^• [        UU4S jU R                   5       SS9$ )Nc              3  óF   >#   • U  H  oR                  TT5      v •  M     g 7frI   )Úis_meromorphic)r   Úargr@   r¨   s     €€r!   r"   Ú+Add._eval_is_meromorphic.<locals>.<genexpr>l  s   øé € ÐKÂ¸#×/Ñ/°°1×5Ð5Âùs   ƒ!T©Ú
quick_exit©r   r%   )rO   r¨   r@   s    ``r!   Ú_eval_is_meromorphicÚAdd._eval_is_meromorphick  s   ù€ ÜÕKÀÇÂÓKØ'+ñ-ð 	-r-   c                óB   ^• [        U4S jU R                   5       5      $ )Nc              3  óD   >#   • U  H  oR                  T5      v •  M     g 7frI   )Ú_eval_is_algebraic_exprr  s     €r!   r"   Ú.Add._eval_is_algebraic_expr.<locals>.<genexpr>p  s   øé € ÐLÂ)¸$×/Ñ/°×5Ð5Â)ùrb   r#  r$  s    `r!   r7  ÚAdd._eval_is_algebraic_expro  s   ø€ ÜÔLÀ$Ç)Â)ÓLÓLÐLr-   c                ó8   • [        S U R                   5       SS9$ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )r�   ©r   r@   s     r!   r"   ÚAdd.<lambda>.<locals>.<genexpr>t  s   é € Ð&šI�q�ŽšIùr\   Tr0  r2  rN   s    r!   rª   ÚAdd.<lambda>s  s   € ¤Ù&˜DŸIšIÓ&°4ò"9r-   c                ó8   • [        S U R                   5       SS9$ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )r„   r<  s     r!   r"   r=  v  ó   é € Ð/¢Y ×	Ö	¢Yùr\   Tr0  r2  rN   s    r!   rª   r>  u  ó   € ¬,Ù/ T§Y¢YÓ/¸Dò+Br-   c                ó8   • [        S U R                   5       SS9$ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Ú
is_complexr<  s     r!   r"   r=  x  ó   é € Ð)šy˜!�Žšyùr\   Tr0  r2  rN   s    r!   rª   r>  w  ó   € ¤LÙ)˜tŸyšyÓ)°dò%<r-   c                ó8   • [        S U R                   5       SS9$ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Úis_antihermitianr<  s     r!   r"   r=  z  rA  r\   Tr0  r2  rN   s    r!   rª   r>  y  rB  r-   c                ó8   • [        S U R                   5       SS9$ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )rr   r<  s     r!   r"   r=  |  s   é € Ð(ši˜�Žšiùr\   Tr0  r2  rN   s    r!   rª   r>  {  s   € ¤<Ù(˜dŸišiÓ(°Tò$;r-   c                ó8   • [        S U R                   5       SS9$ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Úis_hermitianr<  s     r!   r"   r=  ~  ó   é € Ð+¢˜A�Ž¢ùr\   Tr0  r2  rN   s    r!   rª   r>  }  ó   € ¤lÙ+ §¢Ó+¸ò'>r-   c                ó8   • [        S U R                   5       SS9$ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Ú
is_integerr<  s     r!   r"   r=  €  rF  r\   Tr0  r2  rN   s    r!   rª   r>    rG  r-   c                ó8   • [        S U R                   5       SS9$ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   ©Úis_rationalr<  s     r!   r"   r=  ‚  s   é € Ð*¢	˜1�Ž¢	ùr\   Tr0  r2  rN   s    r!   rª   r>  �  s   € ¤\Ù* §	¢	Ó*°tò&=r-   c                ó8   • [        S U R                   5       SS9$ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   )Úis_algebraicr<  s     r!   r"   r=  „  rP  r\   Tr0  r2  rN   s    r!   rª   r>  ƒ  rQ  r-   c                ó:   • [        S U R                   5       5      $ )Nc              3  ó8   #   • U  H  oR                   v •  M     g 7frI   rX   r<  s     r!   r"   r=  …  s   é € ð 5-Ú"+˜Q×Ö¢)ùr\   r2  rN   s    r!   rª   r>  …  s   € ¬ñ 5-Ø"&§)¢)ó5-ô )-r-   c                ór   • SnU R                    H$  nUR                  nUc    g USL d  M  USL a    g SnM&     U$ )NFT)r%   r»   )rO   Úsawinfr@   Úainfs       r!   Ú_eval_is_infiniteÚAdd._eval_is_infiniteˆ  sC   € ØˆØ—”ˆAØ—=‘=ˆDØ‰|ÙØ˜”à˜T’>ÙØ’ñ ð ˆr-   c                óø  • / n/ nU R                    GH  nUR                  (       a7  UR                  (       a  M(  UR                  SL a  UR                  U5        MJ    g UR                  (       a$  UR                  U[
        R                  -  5        M�  UR                  (       a|  [
        R                  UR                   ;   a^  UR                  [
        R                  5      u  pEU[
        R                  4:X  a&  UR                  (       a  UR                  U* 5        GM    g   g    U R                  " U6 nX`:w  aD  UR                  (       a"  [        U R                  " U6 R                  5      $ UR                  SL a  gg g ©NF)r%   r„   rn   r:   Úis_imaginaryr   rÅ   rk   Úas_coeff_mulrÚ   r   )rO   ÚnzÚim_Ir@   r‰   Úair‡   s          r!   Ú_eval_is_imaginaryÚAdd._eval_is_imaginary•  s  € ØˆØˆØ—•ˆAØ×!×!Ø—9—9ÙØ—Y‘Y %Ò'Ø—I‘I˜a–LáØ——Ø—‘˜AœaŸo™oÑ-Ö.Ø——œaŸo™o°·±Ó7ØŸN™N¬1¯?©?Ó;‘	�Øœ!Ÿ/™/Ð+Ó+°×0F×0FØ—K‘K  ×'ááñ# ð$ �IŠI�rˆNˆØ‹9Ø�y�yÜ  §¢¨DÐ!1×!9Ñ!9Ó:Ð:Ø—‘˜eÒ#Øð $ð r-   c                ó$  • U R                   SL a  g / nSnSnSnU R                   Hä  nUR                  (       a<  UR                  (       a  US-  nM,  UR                  SL a  UR	                  U5        MN    g UR
                  (       a  US-  nMh  UR                  (       ak  [        R                  UR                  ;   aM  UR                  [        R                  5      u  pgU[        R                  4:X  a  UR                  (       a  SnMâ    g   g    U[        U R                  5      :X  a  g[        U5      S[        U R                  5      4;   a  g U R                  " U6 nUR                  (       a  U(       d  US:X  a  gUS:X  a  gUR                  SL a  gg )NFr   r	   T)rY   r%   r„   rn   r:   re  rk   r   rÅ   rf  r&   rÚ   )	rO   rg  ÚzÚim_or_zÚimr@   r‰   ri  r‡   s	            r!   Ú_eval_is_zeroÚAdd._eval_is_zero±  s6  € Ø×Ñ %Ò'ð ØˆØˆØˆØˆØ—”ˆAØ×!×!Ø—9—9Ø˜‘F’AØ—Y‘Y %Ò'Ø—I‘I˜a–LáØ——Ø�a‘’Ø——œaŸo™o°·±Ó7ØŸN™N¬1¯?©?Ó;‘	�Øœ!Ÿ/™/Ð+Ó+°×0F×0FØ"’Gááñ# ð$ ”�D—I‘I“ÓØÜˆr‹7�qœ#˜dŸi™i›.Ð)Ó)ØØ�IŠI�rˆNˆØ�9�9ÞØ˜“7ØØ˜1“WØ Ø�9‰9˜ÒØð r-   c                óÖ   • U R                    Vs/ s H  oR                  SLd  M  UPM     nnU(       d  gUS   R                  (       a  U R                  " USS  6 R                  $ g s  snf )NTFr   r	   )r%   Úis_evenÚis_oddr}   )rO   r’   Úls      r!   Ú_eval_is_oddÚAdd._eval_is_oddÚ  s[   € ØŸ	š	Ó=š	�1¯)©)°tÐ*;�Q™	ˆÐ=ÞØØˆQ‰4�;�;Ø×$Ò$ a¨¨ eÐ,×4Ñ4Ð4ð ùò >s
   �A&¥A&c                óÜ   • U R                    H\  nUR                  nU(       aA  [        U R                   5      nUR                  U5        [	        S U 5       5      (       a    g  g Ub  M\    g    g)Nc              3  ó<   #   • U  H  oR                   S L v •  M     g7f)TNrW  )r   r¨   s     r!   r"   Ú*Add._eval_is_irrational.<locals>.<genexpr>ç  s   é € Ð=²f°—}‘}¨Õ,²fùs   ‚TF)r%   Úis_irrationalr4   Úremoverl   )rO   rf   r@   Úotherss       r!   Ú_eval_is_irrationalÚAdd._eval_is_irrationalá  sY   € Ø—”ˆAØ—‘ˆAÞÜ˜dŸi™i›�Ø—‘˜aÔ ÜÑ=±fÓ=×=Ñ=ÙÙØ‹yÙñ ð r-   c                ó¨   • S=pU R                    H?  nUR                  (       a  U(       a    gSnM!  UR                  (       a  U(       a    gSnM?    g    g)Nr   Fr	   T)r%   Úis_nonnegativeÚis_nonpositive)rO   ÚnnÚnpr@   s       r!   Ú_all_nonneg_or_nonpposÚAdd._all_nonneg_or_nonpposî  sG   € ØˆˆØ—”ˆAØ××ÞÙ Ø’Ø×!×!ÞÙ Ø’áñ ð r-   c                ó  >• U R                   (       a  [        TU ]	  5       $ U R                  5       u  pUR                  (       dx  SSKJn  U" U5      nUbg  XA-   nXP:w  a#  UR                  (       a  UR                  (       a  g[        U R                  5      S:X  a"  U" U 5      nUb  X@:w  a  UR                  (       a  gS=n=n=p‰[        5       n
U R                   Vs/ s H  o"R                  (       a  M  UPM     nnU(       d  gU H‘  nUR                  nUR                  nU(       a3  U
R                  [        XÂR                  45      5        SU
;   a  SU
;   a    g U(       a  SnM`  UR                  (       a  SnMu  UR                   (       a  SnMŠ  Uc    g Sn	M“     U
(       a   [        U
5      S:”  a  g U
R#                  5       $ U	(       a  g U(       d  U(       d  U(       a  gU(       d  U(       a  gU(       d	  U(       d  gg g s  snf ©Nr	   ©Ú_monotonic_signTF)rÈ   ÚsuperÚ_eval_is_extended_positiverµ   rn   rË   rŠ  rÇ   r€   r&   Úfree_symbolsÚsetr%   r»   Úaddr   rƒ   r6   )rO   r�   r@   rŠ  r   rZ   ÚposÚnonnegÚnonposÚunknown_signÚsaw_INFr%   ÚisposÚinfiniteÚ	__class__s                 €r!   rŒ  ÚAdd._eval_is_extended_positiveþ  ó   ø€ Ø�>�>Ü‘7Ñ5Ó7Ð7Ø× Ñ Ó"‰ˆØ�y�yÝ2Ù Ó"ˆAØ‰}Ø‘E�Ø“9 ×!7×!7¸A×<U×<UØÜ�t×(Ñ(Ó)¨QÓ.Ù'¨Ó-�AØ‘}¨«°q×7M×7MØ#Ø/4Ð4ˆÐ4ˆfÐ4�vÜ“%ˆØŸ9š9Ó6š9�a¯I­I—™9ˆÐ6ÞØÛˆAØ×*Ñ*ˆEØ—}‘}ˆHÞØ—‘œH e×-FÑ-FÐ%GÓHÔIØ˜7“? u°Ó'7ÙÞØ�ÙØ×*×*Ø�ÙØ×*×*Ø�ÙàÑÙØŠLñ' ö* Ü�7‹|˜aÓØØ—;‘;“=Ð ÞØÞ¦®3ØÞžCØÞžVØð $�ùòE 7ó   ÃG?Ã3G?c                ój  • U R                   (       d¢  U R                  5       u  pUR                  (       d~  UR                  (       al  SSKJn  U" U5      nUbZ  XA-   nXP:w  a  UR                  (       a  g[        U R                  5      S:X  a%  U" U 5      nUb  X@:w  a  UR                  (       a  gg g g g g g g g ©Nr	   r‰  T)rÈ   rµ   rn   r€   rË   rŠ  r&   r�  ©rO   r�   r@   rŠ  r   rZ   s         r!   Ú_eval_is_extended_nonnegativeÚ!Add._eval_is_extended_nonnegative4  ó¢   € Ø�~�~Ø×$Ñ$Ó&‰DˆAØ—9—9 ×!:×!:Ý6Ù# AÓ&�Ø‘=Ø™�AØ“y Q×%>×%>Ø#Ü˜4×,Ñ,Ó-°Ó2Ù+¨DÓ1˜Ø™=¨Q«Y¸1×;T×;TØ#'ð <U¨Y˜=ð 3ð	 !ð ";�9ð r-   c                ój  • U R                   (       d¢  U R                  5       u  pUR                  (       d~  UR                  (       al  SSKJn  U" U5      nUbZ  XA-   nXP:w  a  UR                  (       a  g[        U R                  5      S:X  a%  U" U 5      nUb  X@:w  a  UR                  (       a  gg g g g g g g g rœ  )rÈ   rµ   rn   rƒ   rË   rŠ  r&   r�  r�  s         r!   Ú_eval_is_extended_nonpositiveÚ!Add._eval_is_extended_nonpositiveC  r   r-   c                ó  >• U R                   (       a  [        TU ]	  5       $ U R                  5       u  pUR                  (       dx  SSKJn  U" U5      nUbg  XA-   nXP:w  a#  UR                  (       a  UR                  (       a  g[        U R                  5      S:X  a"  U" U 5      nUb  X@:w  a  UR                  (       a  gS=n=n=p‰[        5       n
U R                   Vs/ s H  o"R                  (       a  M  UPM     nnU(       d  gU H‘  nUR                  nUR                  nU(       a3  U
R                  [        XÂR                  45      5        SU
;   a  SU
;   a    g U(       a  SnM`  UR                  (       a  SnMu  UR                   (       a  SnMŠ  Uc    g Sn	M“     U
(       a   [        U
5      S:”  a  g U
R#                  5       $ U	(       a  g U(       d  U(       d  U(       a  gU(       d  U(       a  gU(       d	  U(       d  gg g s  snf rˆ  )rÈ   r‹  Ú_eval_is_extended_negativerµ   rn   rË   rŠ  rÆ   rƒ   r&   r�  rŽ  r%   r»   r�  r   r€   r6   )rO   r�   r@   rŠ  r   rZ   Únegr’  r‘  r“  r”  r%   Úisnegr–  r—  s                 €r!   r¥  ÚAdd._eval_is_extended_negativeR  r™  rš  c           
     óø  • UR                   (       d:  U[        R                  L a&  U* U R                  ;   a  U R	                  U* U* 05      $ g U R                  5       u  p4UR                  5       u  pVUR                  (       aB  UR                  (       a1  XF:X  a  U R                  X#U* 5      $ XF* :X  a  U R                  U* X55      $ UR                  (       a  UR                  (       d  X5:X  Ga  U R                  R                  U5      U R                  R                  U5      p‡[        U5      [        U5      :  a¸  [        U5      n	[        U5      n
X©:  a8  Xš-
  nU R                  " X#U* /U Vs/ s H  oÌR                  X5      PM     snQ76 $ U R                  R                  U* 5      n[        U5      n
X©:  a8  Xš-
  nU R                  " U* X5/U Vs/ s H  oÌR                  X5      PM     snQ76 $ g g g s  snf s  snf rI   )r7   r   r   r%   rú   rµ   rj   rÚ   Ú	make_argsr&   rŽ  Ú_subs)rO   rí   ÚnewÚ
coeff_selfÚ
terms_selfÚ	coeff_oldÚ	terms_oldÚargs_oldÚ	args_selfÚself_setÚold_setÚret_setrZ   s                r!   Ú
_eval_subsÚAdd._eval_subsˆ  sÓ  € Ø�z�zØ”a—j‘jÒ  c T¨T¯Y©YÓ%6à—}‘} s d¨S¨D \Ó2Ð2Øà!%×!2Ñ!2Ó!4Ñˆ
Ø"×/Ñ/Ó1Ñˆ	à×!×! i×&;×&;ØÓ&Ø—y‘y °9°*Ó=Ð=Ø˜ZÓ'Ø—y‘y #  zÓ=Ð=à×!×! i×&;×&;ØÔ*Ø"&§)¡)×"5Ñ"5Øó#Ø ŸI™I×/Ñ/°
Ó;ð  ä�8‹}œs 9›~Ó-Ü˜y›>�Ü˜h›-�àÓ%Ø&Ñ0�GØŸ9š9 S°y°jð FÙ<CÓ DºG°q§¡¨Ö!2¹GÑ DòFð Fð  Ÿ9™9×.Ñ.Ø�Jó �ä˜h›-�ØÓ%Ø&Ñ0�GØŸ9š9 c T¨:ð FÙ<CÓ DºG°q§¡¨Ö!2¹GÑ DòFð Fð &ð .ð +ùò !Eùò !Es   Å+G2
ÇG7
c                ó†   • U R                    Vs/ s H  oR                  (       a  M  UPM     nnU R                  " U6 $ s  snf rI   ©r%   rm   r}   ©rO   r@   r%   s      r!   ÚremoveOÚAdd.removeO­  s4   € ØŸ9š9Ó7š9�a¯J­J—™9ˆÐ7Ø× Ò  $Ð'Ð'ùò 8s   �>§>c                ó–   • U R                    Vs/ s H  oR                  (       d  M  UPM     nnU(       a  U R                  " U6 $ g s  snf rI   r¹  rº  s      r!   ÚgetOÚAdd.getO±  s<   € ØŸ9š9Ó3š9�a¯
­
—™9ˆÐ3ÞØ×$Ò$ dÐ+Ð+ð ùò 4s
   �A§Ac                óì  • SSK Jn  / n[        [        U5      (       a  UOU/5      nU(       d  S/[	        U5      -  nU R
                   Vs/ s H  oUU" U/[        X5      Q76 4PM     nnU Hv  u  pxU H&  u  pšU
R                  U5      (       d  M  X¨:w  d  M$  Sn  O   Uc  M6  Xx4/nU H4  u  pšUR                  U
5      (       a  X¨:w  a  M"  UR                  Xš45        M6     UnMx     [        U5      $ s  snf )a  
Returns the leading term and its order.

Examples
========

>>> from sympy.abc import x
>>> (x + 1 + 1/x**5).extract_leading_order(x)
((x**(-5), O(x**(-5))),)
>>> (1 + x).extract_leading_order(x)
((1, O(1)),)
>>> (x + x**2).extract_leading_order(x)
((x, O(x)),)

r   r   N)
Úsympy.series.orderr   r4   r   r&   r%   r  r_   r:   r­   )rO   ÚsymbolsÚpointr   Úlstr’   r…   ÚefÚofrŽ   ra   Únew_lsts               r!   Úextract_leading_orderÚAdd.extract_leading_order¶  sì   € õ" 	-ØˆÜ¤+¨g×"6Ñ"6‘w¸W¸IÓFˆÞØ�Cœ˜G›Ñ$ˆEØ<@¿IºIÓFºI°q‘5˜Ð1œS Ó0Ò1Ó2¹IˆÐFÛ‰FˆBÛ‘�Ø—:‘:˜b—>“> a¥gØ�BÙñ ð ‰zÙØ�x�jˆGÛ‘�Ø—;‘;˜q—>‘> a£gÙØ—‘ ˜vÖ&ñ ð ŠCñ ô �S‹zÐùò Gs   ÁC1c                óÔ   • U R                   n/ / pTU H6  nUR                  US9u  pxUR                  U5        UR                  U5        M8     U R                  " U6 U R                  " U6 4$ )zÜ
Return a tuple representing a complex number.

Examples
========

>>> from sympy import I
>>> (7 + 9*I).as_real_imag()
(7, 9)
>>> ((1 + I)/(1 - I)).as_real_imag()
(0, 1)
>>> ((1 + 2*I)*(1 + 3*I)).as_real_imag()
(-5, 5)
rc   )r%   Úas_real_imagr:   rÚ   )	rO   rd   ÚhintsÚsargsÚre_partÚim_partr   Úrero  s	            r!   rË  ÚAdd.as_real_imagÜ  sj   € ð —	‘	ˆØ˜r�ÛˆDØ×&Ñ&¨DÐ&Ð1‰FˆBØ�N‰N˜2ÔØ�N‰N˜2Öñ ð —	’	˜7Ð# T§Y¢Y°Ð%8Ð9Ð9r-   c           
     ó.  ^• SSK JnJn  SSKJn  SSKJm  SSKJnJ	n  SSK
Jn	  U R                  5       n
U
c  U" S5      n
U R                  5       nUR                  U5      (       a  U" U5      n[        U4S jU R                    5       5      (       a  S	S	S
S
S
S
S
S
S
S.	nUR"                  " S0 UD6nU	" U5      nUR$                  (       d  UR'                  XUS9$ UR                    Vs/ s H  oîR(                  (       d  M  UPM     nnUc  U" S5      OUnUR                    Vs/ s H  oîR'                  UUUS9PM     nnU" S5      [*        R,                  nn U H,  nU" UU5      nU(       a  UU;  a  UnUnM  UU;   d  M'  UU-  nM.     Uc  UR1                  UT" U5      5      nUR2                  nUc*  UR5                  5       R7                  5       nUR2                  nUS	L aÆ   UR9                  5       nUR                  U5      (       a  [*        R<                  nU" S5      n[*        R<                  nUR>                  (       aV  URA                  UUU-   X#S9R7                  5       RC                  5       R5                  5       nUS-  nUR>                  (       a  MV  UR'                  XUS9$ U[*        RD                  L a  URF                  RI                  U5      U
-   $ U$ s  snf s  snf ! [.         a    Us $ f = f! [:         a    [*        R<                  n GN!f = f)Nr   )rñ   ÚSymbolr   )Úlog)Ú	PiecewiseÚpiecewise_foldr	   )Ú
expand_mulc              3  ó<   >#   • U  H  n[        UT5      v •  M     g 7frI   )rs   )r   r@   rÔ  s     €r!   r"   Ú,Add._eval_as_leading_term.<locals>.<genexpr>  s   øé € Ð5ª9 aŒz˜!˜S×!Ð!ª9ùs   ƒTF)	rd   rÔ  ÚmulÚ	power_expÚ
power_baseÚmultinomialÚbasicÚforceÚfactor)rá   râ   rá   rß   rV   rD   )%Úsympy.core.symbolrñ   rÓ  rÁ  r   Ú&sympy.functions.elementary.exponentialrÔ  Ú$sympy.functions.elementary.piecewiserÕ  rÖ  rÍ   r×  r¾  r»  rø   ro   r%   Úexpandr7   Úas_leading_termr»   r   r5   Ú	TypeErrorÚsubsrn   ÚtrigsimpÚcancelÚgetnÚNotImplementedErrorr{   rm   rä   Úpowsimprp   rÚ   r=   )rO   r¨   rá   râ   rñ   rÓ  r   rÕ  rÖ  r×  ra   rí   Úlogflagsr)   rf   r–  Ú_logxÚleading_termsÚminÚnew_exprr   Úorderrn   Ún0ÚresÚincrrÔ  s                             @r!   Ú_eval_as_leading_termÚAdd._eval_as_leading_termó  s¾  ø€ ß3Ý,Ý>ßRÝ(à�I‰I‹KˆØ‰9Ù�a“ˆAØ�l‰l‹nˆà�7‰7�9×ÑÙ  Ó%ˆCô Ô5¨4¯9ª9Ó5×5Ñ5Ø $¨T¸%ÈeØ#°EÀEÐTYØñ!ˆHð —*’*Ñ(˜xÑ(ˆCÙ˜#‹ˆà�{�{Ø×'Ñ'¨¸4Ð'Ð@Ð@à#ŸyšyÓ:šy˜!¯M­M—A™yˆÐ:à!%¡‘�f”°4ˆØNRÏiÊiÓXÊiÈ×*Ñ*¨1°5¸tÐ*ÓDÉiˆÐXá˜a›¤!§&¡&ˆXˆð
	Û%�Ù˜d A›�Þ˜e¨3Ó.Ø�CØ#’HØ˜E•\Ø Ñ$’Hñ &ð ‰<Ø—}‘} U©C°«FÓ3ˆHà×"Ñ"ˆØ‰?Ø×(Ñ(Ó*×1Ñ1Ó3ˆHØ×&Ñ&ˆGØ�dŠ?ðØ—X‘X“Z�ð �v‰v�f�~‰~Ü—U‘U�Ù˜“(ˆCÜ—5‘5ˆDØ—,—,Ø×'Ñ'¨¨R°©W¸4Ð'ÐK×RÑRÓT×\Ñ\Ó^×gÑgÓi�Ø˜‘	�ð —,—,‘,ð ×&Ñ& q¸$Ð&Ð?Ð?àœŸ™ÒØ—8‘8×&Ñ& xÓ0°1Ñ4Ð4ð ˆOùò] ;ùò Yøô ó 	ØŠKð	ûô 'ó Ü—U‘U“ðús<   Ã&KÃ>KÄ!KÅ%K$ Å?	K$ Ç"K6 Ë$K3Ë2K3Ë6LÌLc                óz   • U R                   " U R                   Vs/ s H  oR                  5       PM     sn6 $ s  snf rI   )rÚ   r%   Úadjoint©rO   rf   s     r!   Ú_eval_adjointÚAdd._eval_adjoint>  s+   € Ø�yŠy°·	²	Ó:²	¨1Ÿ9™9ž;±	Ñ:Ð;Ð;ùÒ:ó   ›8c                óz   • U R                   " U R                   Vs/ s H  oR                  5       PM     sn6 $ s  snf rI   )rÚ   r%   Ú	conjugaterú  s     r!   Ú_eval_conjugateÚAdd._eval_conjugateA  ó+   € Ø�yŠy°$·)²)Ó<²)¨QŸ;™;ž=±)Ñ<Ð=Ð=ùÒ<rý  c                óz   • U R                   " U R                   Vs/ s H  oR                  5       PM     sn6 $ s  snf rI   )rÚ   r%   Ú	transposerú  s     r!   Ú_eval_transposeÚAdd._eval_transposeD  r  rý  c                ó
  • / nSnU R                    H{  nUR                  5       u  pEUR                  (       d  [        R                  nUnU=(       d    U[        R
                  L nUR                  UR                  UR                  U45        M}     U(       dI  [        [        U Vs/ s H  ofS   PM	     snS5      n[        [        U Vs/ s H  ofS   PM	     snS5      nO`[        [        U Vs/ s H  ofS   (       d  M  US   PM     snS5      n[        [        U Vs/ s H  ofS   (       d  M  US   PM     snS5      nXxs=:X  a  S:X  a  O  O[        R                  U 4$ U(       d7  [        U5       H'  u  n	u  p«n[        [        X§-  X‹-  -  5      U5      X'   M)     OV[        U5       HG  u  n	u  p«nU(       a   [        [        X§-  X‹-  -  5      U5      X'   M0  [        [        X«5      U5      X'   MI     US   R                  (       d  US   [        R
                  L a  UR!                  S5      nOSn[#        U5        U(       a  UR%                  SU5        [        Xx5      U R&                  " U6 4$ s  snf s  snf s  snf s  snf )aw  
Return ``(R, self/R)`` where ``R``` is the Rational GCD of ``self```.

``R`` is collected only from the leading coefficient of each term.

Examples
========

>>> from sympy.abc import x, y

>>> (2*x + 4*y).primitive()
(2, x + 2*y)

>>> (2*x/3 + 4*y/9).primitive()
(2/9, 3*x + 2*y)

>>> (2*x/3 + 4.2*y).primitive()
(1/3, 2*x + 12.6*y)

No subprocessing of term factors is performed:

>>> ((2 + 2*x)*x + 2).primitive()
(1, x*(2*x + 2) + 2)

Recursive processing can be done with the ``as_content_primitive()``
method:

>>> ((2 + 2*x)*x + 2).as_content_primitive()
(2, x*(x + 1) + 1)

See also: primitive() function in polytools.py

Fr   r	   N)r%   rv   rj   r   r{   rq   r:   rÎ   rÉ   r   r   r   Ú	enumerater  ÚRationalr9   r6   r2   r;   r}   )rO   rˆ   rþ   r@   r�   Úmrf   ÚngcdÚdlcmr    rÎ   rÉ   r   s                r!   r
  ÚAdd.primitiveG  s  € ðF ˆØˆØ—”ˆAØ—>‘>Ó#‰DˆAØ—=—=Ü—E‘E�Ø�Ø×/˜œa×/Ñ/Ð/ˆCØ�L‰L˜!Ÿ#™#˜qŸs™s A˜Ö'ñ ö Üœ$©uÓ 5ªu¨! 1¤©uÑ 5°qÓ9ˆDÜœ$©uÓ 5ªu¨! 1¤©uÑ 5°qÓ9‰Däœ$©uÓ =ªu¨!¸!½£  1¤©uÑ =¸qÓAˆDÜœ$©uÓ =ªu¨!¸!½£  1¤©uÑ =¸qÓAˆDàÕ˜1ÖÜ—5‘5˜$�;ÐÞÜ#,¨UÖ#3‘�‘<�A˜$Ü&¤x°±¸4¹7Ñ0CÓ'DÀdÓK�“ò $4ô $-¨UÖ#3‘�‘<�A˜$ÞÜ*¬8°Q±W¸t¹wÑ4GÓ+HÈ$ÓO�E“Hä*¬8°A«>¸4Ó@�E“Hñ	 $4ð �‰8××  q¡¬Q×->Ñ->Ò!>Ø—	‘	˜!“‰AàˆAÜ�ŒÞØ�L‰L˜˜AÔÜ˜Ó# T×%6Ò%6¸Ð%>Ð>Ð>ùòA !6ùÚ 5ùâ =ùÚ =s$   Â%I1
Ã	I6
Ã.I;
Ã?	I;
ÄJ 
Ä/	J 
c                óæ  • U R                   " U R                   Vs/ s H  n[        UR                  XS96 PM     sn6 R	                  5       u  pEU(       d`  UR
                  (       dO  UR                  (       a>  UR                  5       u  pFXV-  n[        S UR                   5       5      (       a  UnOXF-  nU(       Ga$  UR                  (       Ga  UR                  n/ n	Sn
U GH  n[        [        5      n[        R                  " U5       HŠ  nUR                  (       d  M  UR                  5       u  pïUR                  (       d  M;  UR
                  (       d  MN  XÏR                      R#                  [%        ['        U5      5      UR(                  -  5        MŒ     U(       d    XE4$ U
c  [+        UR-                  5       5      n
O'U
[+        UR-                  5       5      -  n
U
(       d    XE4$ U	R#                  U5        GM     U	 HS  n[        UR-                  5       5       H  nUU
;  d  M  UR/                  U5        M     U H  n[        UU   6 UU'   M     MU     / nU
 HN  n[1        [2        U	 Vs/ s H  nUU   PM
     snS5      nUS:w  d  M0  UR#                  U[5        SU5      -  5        MP     U(       a.  [        U6 nU Vs/ s H  oÝU-  PM	     nnUUR                   " U6 -  nXE4$ s  snf s  snf s  snf )a  Return the tuple (R, self/R) where R is the positive Rational
extracted from self. If radical is True (default is False) then
common radicals will be removed and included as a factor of the
primitive expression.

Examples
========

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

Radical content can also be factored out of the primitive:

>>> (2*sqrt(2) + 4*sqrt(10)).as_content_primitive(radical=True)
(2, sqrt(2)*(1 + 2*sqrt(5)))

See docstring of Expr.as_content_primitive for more examples.
)ÚradicalÚclearc              3  óZ   #   • U  H!  oR                  5       S    R                  v •  M#     g7f)r   N)rv   ry   r<  s     r!   r"   Ú+Add.as_content_primitive.<locals>.<genexpr>°  s    é € ÐCº7°a—>‘>Ó# AÑ&×1Ö1º7ùs   ‚)+Nr   r	   )rÚ   r%   r  Úas_content_primitiver
  ry   r7   r  ro   r   r4   r~   rª  rw   rx   rj   rÉ   r:   rÏ   ÚintrÎ   rŽ  Úkeysr6   r   r   r	  )rO   r  r  r@   ÚconÚprimr  Ú_pr%   ÚradsÚcommon_qr
  Ú	term_radsri  r‡   rŽ   rÔ   rÉ   ÚGÚgs                       r!   r  ÚAdd.as_content_primitive—  s�  € ð( —I’IØ48·I²Ió ?Ú4=¨qô !,¨Q×-CÑ-CØð .Dð .*ó !+Ù4=ñ ?ð @ß@IÁ	Ãñ 	ˆæ˜SŸ^Ÿ^°··Ø×'Ñ'Ó)‰FˆCØ‘ˆBÜÑC¸2¿7º7ÓC×CÑCØ‘à‘�ß�t—{—{�{à—9‘9ˆDØˆDØˆHÜ�Ü'¬Ó-�	ÜŸ-š-¨Ö*�BØ—y—y‘yØ!Ÿ~™~Ó/™˜ØŸ=Ÿ=™=¨Q¯\¯\©\Ø%§c¡c™N×1Ñ1´#´c¸!³f³+¸q¿s¹sÑ2BÖCñ	 +ö
 !Øð8 ˆyÐð7 Ñ#Ü" 9§>¡>Ó#3Ó4‘Hà'¬#¨i¯n©nÓ.>Ó*?Ñ?�HÞ#Øð, ˆyÐð+ —‘˜I×&ñ ó& �AÜ! !§&¡&£(ž^˜Ø HÕ,ØŸE™E !žHñ ,ó ˜Ü" A a¡D˜z˜˜!›ó ñ	 ð �Û!�AÜœt±DÓ%9²D¨q a¨¤d±DÑ%9¸1Ó=�AØ˜A•vØŸ™ ¤H¨Q°£NÑ!2Ö3ñ "ö Ü˜Q˜�AÙ+/Ó0ª4 R˜qœD©4�DÐ0Ø˜TŸYšY¨Ð-Ñ-�DàˆyÐùòe ?ùòT &:ùò
 1s   ›K$É+K)Ê?K.c                óH   • SSK Jn  [        [        U R                  US95      $ )Nr	   )Údefault_sort_keyr/   )Úsortingr   r­   Úsortedr%   )rO   r   s     r!   Ú_sorted_argsÚAdd._sorted_argsß  s   € å-Ü”V˜DŸI™IÐ+;Ñ<Ó=Ð=r-   c           
     óx   • SSK Jn  U R                  " U R                   Vs/ s H  oC" XAU5      PM     sn6 $ s  snf )Nr   )Údifference_delta)Úsympy.series.limitseqr&  rÚ   r%   )rO   rà   ÚstepÚddr@   s        r!   Ú_eval_difference_deltaÚAdd._eval_difference_deltaä  s0   € Ý@Ø�yŠy°4·9²9Ó=²9¨a˜2˜a Dž>±9Ñ=Ð>Ð>ùÒ=s   ¡7c                óÜ   • SSK Jn  U R                  5       u  p#UR                  5       u  pEU[        R
                  :X  d  [        S5      eU" U5      R                  U" U5      R                  4$ )z+
Convert self to an mpmath mpc if possible
r	   )ÚFloatz@Cannot convert Add to mpc. Must be of the form Number + Number*I)Únumbersr-  rµ   rv   r   rÅ   ÚAttributeErrorÚ_mpf_)rO   r-  rÎ  ÚrestrÏ  Ú	imag_units         r!   Ú_mpc_Ú	Add._mpc_è  sa   € õ
 	#Ø×)Ñ)Ó+‰ˆØ!×.Ñ.Ó0ÑˆØœAŸO™OÓ+ô !Ð!cÓdÐdá�g“×$Ñ$¡e¨G£n×&:Ñ&:Ð;Ð;r-   c                ó~   >• [         R                  (       d  [        TU ]  5       $ [	        [
        R                  U 5      $ rI   )r   Ú
distributer‹  Ú__neg__r~   r   ÚNegativeOne)rO   r—  s    €r!   r7  ÚAdd.__neg__ø  s*   ø€ Ü ×+×+Ü‘7‘?Ó$Ð$Ü”1—=‘= $Ó'Ð'r-   )r%   zExpr | complexrG   r'   Úreturnr   )r:  ztuple[Expr, ...])r…   z
list[Expr]r:  z#tuple[list[Expr], list[Expr], None])FN)r:  ztuple[Number, Expr])r   rd  )r:  ztuple[Expr, Expr]rI   )T)FT)Hr˜   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	__slots__r7   r   Ú
_args_typeÚ__annotations__r   rK   Úpropertyr%   Úclassmethodr”   r™   rœ   r   r   r®   rµ   r×   rÜ   rä   ré   rç   Ústaticmethodr  r  r  r  r(  r3  r7  Ú_eval_is_realÚ_eval_is_extended_realÚ_eval_is_complexÚ_eval_is_antihermitianÚ_eval_is_finiteÚ_eval_is_hermitianÚ_eval_is_integerÚ_eval_is_rationalÚ_eval_is_algebraicÚ_eval_is_commutativera  rj  rp  rv  r~  r…  rŒ  rž  r¢  r¥  r¶  r»  r¾  rÈ  rË  rö  rû  r   r  r
  r  r#  r*  r3  r7  Ú__static_attributes__Ú__classcell__)r—  s   @r!   r<   r<   ]   s  ø‡ ñTðl €Ià€Fà€JàÓæà?C÷ 	ð 
ó	ó 
ð	ð óP$ó ðP$ðd ñ"ó ð"ð ñ
ó ð
ò/ð ñ!ó ð!ö,ò#)ðJ ñ:ó ð:ô!òô?ð ñ,ó ð,ð2 ñ?ó ð?ô&-:ò^IòPò-òMñ9€MñBÐñ<ÐñBÐñ;€Oñ>Ðñ<Ðñ=Ðñ>Ðñ-Ðòòò8'òR5òòõ 4òl(ò(õ4òl#FòJ(ò,ð
 ó#ó ð#ôJ:ò.IòV<ò>ò>òN?ô`FðP ñ>ó ð>ò?ð ñ<ó ð<÷(ó (r-   r<   r�  )r~   r  rÐ   )r	  N)3Ú
__future__r   Útypingr   r   Úcollectionsr   Ú	functoolsr   Úoperatorr   rÞ  r
   Ú
parametersr   Úlogicr   r   r   Ú	singletonr   Ú
operationsr   r   Úcacher   Úintfuncr   r   r)   r   rœ   r   Úsympy.utilities.iterablesr   r   Úsympy.core.numbersr   rÁ  r   r,   r2   rA   r<   r�  rÚ  r~   r  rÐ   r.  r	  rD   r-   r!   Ú<module>r^     sv   ðÝ "ç *Ý #Ý Ý Ý  Ý )ß 4Ñ 4Ý ß 2Ý ß Ý Ý ß 7ö Ý)Ý(ò6ò !ò
-#ô`^(ˆ$�ô ^(ñ@% ˜Ó€ç 3Ñ 3Þ r-   