ó
    Š*£hû3  ã                   óö   • S SK Jr  S SKJrJrJrJr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  S SKJr  S SKJrJrJr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 jr%S r& " S S\5      r'g)é    )ÚAccumBounds)ÚSÚSymbolÚAddÚsympifyÚExprÚ	PoleErrorÚMul)Úfactor_terms)ÚFloatÚ_illegal)ÚAppliedUndef)ÚDummy)Ú	factorial)ÚAbsÚsignÚargÚre)ÚexpÚlog)Úgamma)ÚPolynomialErrorÚfactor)ÚOrderé   )Úgruntzc                 ó4   • [        XX#5      R                  SS9$ )a½  Computes the limit of ``e(z)`` at the point ``z0``.

Parameters
==========

e : expression, the limit of which is to be taken

z : symbol representing the variable in the limit.
    Other symbols are treated as constants. Multivariate limits
    are not supported.

z0 : the value toward which ``z`` tends. Can be any expression,
    including ``oo`` and ``-oo``.

dir : string, optional (default: "+")
    The limit is bi-directional if ``dir="+-"``, from the right
    (z->z0+) if ``dir="+"``, and from the left (z->z0-) if
    ``dir="-"``. For infinite ``z0`` (``oo`` or ``-oo``), the ``dir``
    argument is determined from the direction of the infinity
    (i.e., ``dir="-"`` for ``oo``).

Examples
========

>>> from sympy import limit, sin, oo
>>> from sympy.abc import x
>>> limit(sin(x)/x, x, 0)
1
>>> limit(1/x, x, 0) # default dir='+'
oo
>>> limit(1/x, x, 0, dir="-")
-oo
>>> limit(1/x, x, 0, dir='+-')
zoo
>>> limit(1/x, x, oo)
0

Notes
=====

First we try some heuristics for easy and frequent cases like "x", "1/x",
"x**2" and similar, so that it's fast. For all other cases, we use the
Gruntz algorithm (see the gruntz() function).

See Also
========

 limit_seq : returns the limit of a sequence.
F)Údeep)ÚLimitÚdoit)ÚeÚzÚz0Údirs       ÚP/home/mande/repo/quber/.venv/lib/python3.13/site-packages/sympy/series/limits.pyÚlimitr&      s    € ôf ��rÓ×$Ñ$¨%Ð$Ð0Ð0ó    c                 ó6  • SnU[         R                  L aH  [        U R                  USU-  5      U[         R                  S5      n[        U[        5      (       a  g U$ U R                  (       dJ  U R                  (       d9  U R                  (       d(  U R                  (       Gaf  [        U [        5      (       GdP  / nSSKJn  U R                   GH  n[        XqX#5      nUR                  [         R                  5      (       a‘  UR                   c„  [        U ["        5      (       am  [%        U 5      n	[        U	[&        5      (       d  U" U	5      n	[        U	[&        5      (       d  [)        U 5      n	[        U	[&        5      (       a  [+        X‘X#5      s  $   g  g[        U[        5      (       a    gU[         R,                  L a    gUR/                  U5        GM     U(       Ga-  U R0                  " U6 nU[         R,                  L aÂ  U R                  (       a±  [3        S U 5       5      (       aš  / n
/ n[5        U5       HK  u  pÍ[        U[6        5      (       a  U
R/                  U5        M-  UR/                  U R                  U   5        MM     [9        U5      S:”  a-  ['        U6 R;                  5       n[        XáX#5      nU['        U
6 -  nU[         R,                  L a6   SSKJn  U" U 5      nU[         R,                  L d  UU :X  a  g[        UXU5      $ U$ ! [@         a     gf = f)a  Computes the limit of an expression term-wise.
Parameters are the same as for the ``limit`` function.
Works with the arguments of expression ``e`` one by one, computing
the limit of each and then combining the results. This approach
works only for simple limits, but it is fast.
Nr   Ú+r   )Útogetherc              3   óB   #   • U  H  n[        U[        5      v •  M     g 7f©N)Ú
isinstancer   )Ú.0Úrrs     r%   Ú	<genexpr>Úheuristics.<locals>.<genexpr>j   s   é € Ð/XÒVWÐPR´
¸2¼{×0KÐ0KÒVWùs   ‚)Úratsimp)!r   ÚInfinityr&   ÚsubsÚZeror-   r   Úis_MulÚis_AddÚis_PowÚis_Functionr   Úsympy.simplify.simplifyr*   ÚargsÚhasÚ	is_finiter   r   r
   r   Ú
heuristicsÚNaNÚappendÚfuncÚanyÚ	enumerater   ÚlenÚsimplifyÚsympy.simplify.ratsimpr2   r   )r!   r"   r#   r$   ÚrvÚrr*   ÚaÚlÚmÚr2Úe2ÚiiÚrvalÚe3r2   Úrat_es                    r%   r>   r>   E   sU  € ð 
€BØ	ŒQ�Z‰ZÒÜ�1—6‘6˜!˜Q˜q™S“> 1¤a§f¡f¨cÓ2ˆÜ�bœ%× Ñ Øð !ðb €Ið_ �(�(�a—h—h !§(§(¨q¯}¯}¨}ÄZÐPQÔS_×E`ÒE`ØˆÝ4Ø—•ˆAÜ�a˜BÓ$ˆAØ�u‰u”Q—Z‘Z× Ñ  Q§[¡[Ñ%8Ü˜a¤×%Ñ%Ü$ Q›�AÜ% a¬×-Ñ-Ù$ Q›K˜Ü% a¬×-Ñ-Ü" 1›I˜Ü! !¤S×)Ñ)Ü)¨!°Ó8Ò8ÙÙÜ˜Aœu×%Ñ%ÙØ”a—e‘e’Ùà—‘˜—ñ% ÷& Ø—’˜�ˆBØ”Q—U‘UŠ{˜qŸxŸx¬CÑ/XÑVWÓ/X×,XÑ,XØ�Ø�Ü )¨!¦‘H�BÜ! $¬×4Ñ4ØŸ	™	 $žàŸ	™	 !§&¡&¨¡*Ö-ñ	 !-ô �r“7˜Q“;Ü˜b˜×*Ñ*Ó,�BÜ˜b RÓ-�AØœS "˜X™�Bà”Q—U‘UŠ{ðÝ>Ù# A›J�Eð œAŸE™E’> U¨a£ZØÜ˜U A¨3Ó/Ð/Ø€Iøô 'ó Ùðús   ËL Ì
LÌLc                   ó>   • \ rS rSrSrS	S jr\S 5       rS rS r	Sr
g)
r   é„   zäRepresents an unevaluated limit.

Examples
========

>>> from sympy import Limit, sin
>>> from sympy.abc import x
>>> Limit(sin(x)/x, x, 0)
Limit(sin(x)/x, x, 0, dir='+')
>>> Limit(1/x, x, 0, dir="-")
Limit(1/x, x, 0, dir='-')

c                 óŒ  • [        U5      n[        U5      n[        U5      nU[        R                  [        R                  [        R                  -  4;   a  SnO7U[        R                  [        R                  [        R                  -  4;   a  SnUR                  U5      (       a  [        SU< SU< S35      e[        U[        5      (       a  [        U5      nO,[        U[        5      (       d  [        S[        U5      -  5      e[        U5      S;  a  [        SU-  5      e[        R                  " U 5      nXX44Ul        U$ )	NÚ-r)   z7Limits approaching a variable point are not supported (z -> Ú)z6direction must be of type basestring or Symbol, not %s)r)   rU   ú+-z1direction must be one of '+', '-' or '+-', not %s)r   r   r3   ÚImaginaryUnitÚNegativeInfinityr<   ÚNotImplementedErrorr-   Ústrr   Ú	TypeErrorÚtypeÚ
ValueErrorr   Ú__new__Ú_args)Úclsr!   r"   r#   r$   Úobjs         r%   r_   ÚLimit.__new__“   s  € Ü�A‹JˆÜ�A‹JˆÜ�R‹[ˆà”!—*‘*œaŸo™o¬a¯j©jÑ8Ð9Ó9Ø‰CØ”A×&Ñ&¬¯©¼×8JÑ8JÑ(JÐKÓKØˆCà�6‰6�!�9‰9Ý%Û34³bð':ó ;ð ;ä�cœ3×ÑÜ˜“+‰CÜ˜C¤×(Ñ(Üð %Ü'+¨C£yñ1ó 2ð 2äˆs‹8Ð+Ó+Üð &Ø(+ñ,ó -ð -ô �lŠl˜3ÓˆØ˜2�OˆŒ	Øˆ
r'   c                 óÜ   • U R                   S   nUR                  nUR                  U R                   S   R                  5        UR                  U R                   S   R                  5        U$ )Nr   r   é   )r;   Úfree_symbolsÚdifference_updateÚupdate)Úselfr!   Úisymss      r%   rf   ÚLimit.free_symbols®   sS   € à�I‰I�a‰LˆØ—‘ˆØ×Ñ §	¡	¨!¡× 9Ñ 9Ô:Ø�‰�T—Y‘Y˜q‘\×.Ñ.Ô/Øˆr'   c                 ó  • U R                   u  p#pBUR                  UR                  peUR                  U5      (       d#  [	        U[        U5      -  X45      n[        U5      $ [	        XcU5      n[	        XSU5      n	U	[        R                  L a@  U[        R                  [        R                  4;   a  [	        XeS-
  -  X45      n[        U5      $ U	[        R                  L a$  U[        R                  L a  [        R                  $ g g )Nr   )r;   Úbaser   r<   r&   r   r   ÚOner3   rY   ÚComplexInfinity)
ri   r!   Ú_r"   r#   Úb1Úe1ÚresÚex_limÚbase_lims
             r%   Úpow_heuristicsÚLimit.pow_heuristics·   sÌ   € Ø—i‘i‰ˆˆbØ—‘˜Ÿ™ˆBØ�v‰v�a�y‰yÜ˜œ3˜r›7™
 AÓ*ˆCÜ�s“8ˆOä�r˜bÓ!ˆÜ˜ Ó#ˆà”q—u‘uÒØœ!Ÿ*™*¤a×&8Ñ&8Ð9Ó9Ü˜B Q¡™K¨Ó/�Ü˜3“x�Ø”q×)Ñ)Ò)¨f¼¿
¹
Ò.BÜ×$Ñ$Ð$ð /CÐ)r'   c           	      ól  ^^^^• U R                   u  nmmm[        T5      S:X  a°  [        UTTSS9n[        UTTSS9n[        U[        5      (       a7  [        U[        5      (       a"  UR                   S   UR                   S   :X  a  U $ X4:X  a  U$ UR
                  (       a!  UR
                  (       a  [        R                  $ [        SU< SU< 35      eT[        R                  L a  [        S5      eTR
                  (       a@  [        T5      nU[        U5      -  nUR                  TUT-  5      nSm[        R                  mUR                  S	S
5      (       a6  UR                  " S0 UD6nTR                  " S0 UD6mTR                  " S0 UD6mUT:X  a  T$ UR!                  T5      (       d  U$ T[        R"                  L a  [        R"                  $ UR                   " [$        6 (       a  U $ UR&                  (       a.  [)        [        UR*                  TT5      /UR                   SS Q76 $ [        R,                  n[        T5      S:X  a  [        R.                  nO[        T5      S:X  a  [        R0                  nUUUU4S jmUR!                  [2        5      (       a  SSKJn  U" U5      nT" U5      nUR9                  TT5      (       aÙ  T[        R                  L a  UR                  TST-  5      nU* nOUR                  TTT-   5      n UR;                  TUS9u  p‰U	S:”  a  [        R,                  $ U	S:X  a  U$ US:X  d  [=        U	5      S-  (       d  [        R                  [        U5      -  $ US:X  a  [        R>                  [        U5      -  $ [        R                  $ T[        R                  L aa  UR@                  (       a  [C        U5      n[E        STRF                  TRH                  TRJ                  S9n
UR                  TSU
-  5      nU* nU
nOUR                  TTT-   5      nTn UR;                  XµS9u  p‰[        U[L        5      (       a  U	[        R,                  :X  a  U$ UR!                  [        R                  [        R>                  [        R                  [        R"                  5      (       a  U $ UR!                  U5      (       dÁ  U	RF                  (       a  [        R,                  $ U	S:X  a  U$ U	RH                  (       ay  US:X  a  [        R                  [        U5      -  $ US:X  aA  [        R>                  [        U5      -  [        R0                  [        R.                  U	-   -  -  $ [        R                  $ [        SU	-  5      e TRb                  (       a  URe                  [f        [h        5      nSn [_        UTTT5      nU[        R"                  L d  U[        R"                  L a
  [O        5       e U$ ! [         a     GNof = f! [        [        [N        4 aÖ    SSK(J)n  U" U5      nURT                  (       a  U RW                  U5      nUb  Us $  URY                  XµS9nX‡:w  ai  UR!                  [Z        5      (       d$  UR!                  [        R\                  5      (       a+  [_        X‹S[a        U5      RH                  (       a  SOS5      s $  GNM! [        [        [N        4 a      GNff = ff = f! [N        [        4 a    Ub  e [k        UTTT5      nUc  U s $  U$ f = f)a  Evaluates the limit.

Parameters
==========

deep : bool, optional (default: True)
    Invoke the ``doit`` method of the expressions involved before
    taking the limit.

hints : optional keyword arguments
    To be passed to ``doit`` methods; only used if deep is True.
rW   r)   )r$   rU   r   z1The limit does not exist since left hand limit = z and right hand limit = z.Limits at complex infinity are not implementedr   Tr   Nc                 ó,  >• U R                   (       d  U $ [        U4S jU R                    5       5      nXR                   :w  a  U R                  " U6 n [        U [        5      n[        U [
        5      n[        U [        5      nU(       d  U(       d  U(       aë   [        U R                   S   TT	T5      nUR                  (       a  [        SU R                   S   -  TT	T5      nUR                  (       a�  US:  S:X  a>  U(       a  U R                   S   * $ U(       a  [        R                  $ [        R                  $ US:„  S:X  a=  U(       a  U R                   S   $ U(       a  [        R                  $ [        R                  $ U $ U $ ! [         a    U s $ f = f)Nc              3   ó4   >#   • U  H  nT" U5      v •  M     g 7fr,   © )r.   r   Ú	set_signss     €r%   r0   Ú0Limit.doit.<locals>.set_signs.<locals>.<genexpr>  s   øé € Ð@²i¨s™I cŸN˜N²iùs   ƒr   r   T)r;   ÚtuplerA   r-   r   r   r   r&   Úis_zeroÚis_extended_realr   ÚNegativeOneÚPirn   r5   rZ   )
ÚexprÚnewargsÚabs_flagÚarg_flagÚ	sign_flagÚsigr$   r|   r"   r#   s
         €€€€r%   r|   ÚLimit.doit.<locals>.set_signs  sI  ø€ Ø—9—9Ø�ÜÔ@°d·i²iÓ@Ó@ˆGØŸ)™)Ó#Ø—y’y 'Ð*�Ü! $¬Ó,ˆHÜ! $¬Ó,ˆHÜ" 4¬Ó.ˆIÞž9®ðDÜ §	¡	¨!¡¨a°°SÓ9�CØ—{—{Ü# A d§i¡i°¡l¡N°A°r¸3Ó?˜ð ×+×+Ø !™G¨Ó,Þ5= T§Y¡Y¨q¡\ Mð JÞ5>¤A§M¡MðJÜDEÇDÁDðJà! A™g¨$Ó.Þ4< D§I¡I¨a¡Lð DÞ-6¤A§E¡EðDÜ<=¿F¹FðDàˆK�4ˆKøô +ó  Ø’Kð ús   ÂA
F ÆFÆF)Ú	nsimplify)Úcdiréÿÿÿÿr"   )ÚpositiveÚnegativeÚrealzNot sure of sign of %s)Úpowsimpr{   )6r;   r[   r&   r-   r   Úis_infiniter   ro   r^   rZ   r   Úabsr4   r3   Úgetr    r<   r?   r   Úis_Orderr   rƒ   r5   rn   r�   r   r:   rŠ   Úis_meromorphicÚleadtermÚintrY   r6   r   r   Úis_positiveÚis_negativeÚis_realr   r	   Úsympy.simplify.powsimpr�   r8   rv   Úas_leading_termr   ÚExp1r   r   Úis_extended_nonnegativeÚrewriter   r   r>   )ri   Úhintsr!   rH   rJ   r‹   rŠ   ÚneweÚcoeffÚexÚdummyÚnewzr�   r$   r|   r"   r#   s                @@@@r%   r    Ú
Limit.doitÉ   sâ  û€ ð Ÿ	™	‰ˆˆ1ˆb�#äˆs‹8�tÓÜ�a˜˜B CÑ(ˆAÜ�a˜˜B CÑ(ˆAÜ˜!œU×#Ñ#¬
°1´e×(<Ñ(<Ø—6‘6˜!‘9 §¡ q¡	Ó)Ø�KØ‹vØ�Ø�}�} §§Ü×(Ñ(Ð(Ýã !¢1ð&ó 'ð 'ð ”×"Ñ"Ò"Ü%ð 'Có Dð Dð �>�>Ü˜“8ˆDØœ˜D›	‘>ˆDØ—‘�q˜$˜q™&Ó!ˆAØˆCÜ—‘ˆBà�9‰9�V˜T×"Ñ"Ø—’‘˜‘ˆAØ—’‘˜‘ˆAØ—’Ñ!˜5Ñ!ˆBà�‹6ØˆIà�u‰u�Q�x‰xØˆHà”—‘Š;Ü—5‘5ˆLà�5Š5”(ÖØˆKà�:�:Üœ˜qŸv™v q¨"Ó-Ð;°·±°q°r°
Ò;Ð;ä�v‰vˆÜˆs‹8�s‹?Ü—5‘5‰DÜ�‹X˜‹_Ü—=‘=ˆD÷	ð 	ð4 �5‰5”�<‰<õ
 :Ù˜!“ˆAÙ�a‹Lˆð ×Ñ˜A˜r×"Ñ"Ø”Q—Z‘ZÒØ—v‘v˜a  1¡“~�à�u‘à—v‘v˜a  R¡Ó(�ð-Ø ŸM™M¨!°$˜MÐ7‘	�ð ˜“6ÜŸ6™6�MØ˜1“WØ �LØ˜1“9¤C¨£G¨a§KÜŸ:™:¤d¨5£kÑ1Ð1Ø˜R“ZÜ×-Ñ-¬d°5«kÑ9Ð9ä×,Ñ,Ð,à”—‘ÒØ�x�xÜ  “O�Ü˜#¨¯©ÀÇÁÐTU×T]ÑT]Ñ^ˆEØ—6‘6˜!˜Q˜u™WÓ%ˆDà�5ˆDØ‰Dà—6‘6˜!˜Q ™VÓ$ˆDØˆDð"	MØŸ™ d˜Ð6‰IˆEô  ˜%¤×-Ñ-°"¼¿¹³,Ø�Ø�y‰yœŸ™¤Q×%7Ñ%7¼×9JÑ9JÌAÏEÉE×RÑRØ�Ø—9‘9˜T—?‘?Ø—>—>ÜŸ6™6�MØ˜1“WØ �LØ—^—^Ø˜q“yÜ Ÿz™z¬$¨u«+Ñ5Ð5Ø ›Ü ×1Ñ1´$°u³+Ñ=¼a¿m¹mÌaÏeÉeÐVXÉjÑ>YÑYÐYä ×0Ñ0Ð0ä-Ð.FÈÑ.KÓLÐLð #ð& ×%×%Ø—	‘	œ)¤UÓ+ˆAàˆð		Ü�q˜!˜R Ó%ˆAØ”A—E‘EŠz˜Q¤!§%¡%šZÜ“kÐ!ð (ð ˆøôc ó Úðûô6 Ô/´Ð;ó 	å6Ù˜“
ˆAØ�x�xØ×'Ñ'¨Ó*�Ø‘=Ø’HðØ×,Ñ,¨TÐ,Ð=�Ø“= e§i¡i´§n¡n¸¿	¹	Ä!Ç&Á&×8IÑ8IÜ! %¨q¼¸D»×9M×9M±#ÐSVÓWÒWûÜÔ 3´YÐ?ó Ûðúð	ûô^ œ:Ð&ó 	Ø‰}ØÜ˜1˜a  SÓ)ˆAØ‰yØ’ð ð ˆð	úsV   ÌX Ð1X ×>\ Ø
XØXØA
\Ù%A:[%Û\Û%[?Û:\Û>[?Û?\Ü'\3Ü2\3r{   N©r)   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r_   Úpropertyrf   rv   r    Ú__static_attributes__r{   r'   r%   r   r   „   s+   † ñôð6 ñó ðò%õ$Ar'   r   Nr§   )(Ú!sympy.calculus.accumulationboundsr   Ú
sympy.corer   r   r   r   r   r	   r
   Úsympy.core.exprtoolsr   Úsympy.core.numbersr   r   Úsympy.core.functionr   Úsympy.core.symbolr   Ú(sympy.functions.combinatorial.factorialsr   Ú$sympy.functions.elementary.complexesr   r   r   r   Ú&sympy.functions.elementary.exponentialr   r   Ú'sympy.functions.special.gamma_functionsr   Úsympy.polysr   r   Úsympy.series.orderr   r   r&   r>   r   r{   r'   r%   Ú<module>r»      sO   ðÝ 9ß D× DÑ DÝ -ß .Ý ,Ý #Ý >ß EÓ Eß =Ý 9ß /Ý $Ý ô31òl<ô~FˆDõ Fr'   