Ë
    P/æj+2  ã                   óÜ   — d dl mZ d dlmZmZmZmZmZ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mZ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  dd„Z!d„ Z" G d„ de«      Z#y)é    )ÚAccumBounds)ÚSÚSymbolÚAddÚsympifyÚExprÚ	PoleErrorÚMul)Úfactor_terms)ÚFloatÚ_illegal)Ú	factorial)ÚAbsÚsignÚargÚre)ÚexpÚlog)Úgamma)ÚPolynomialErrorÚfactor)ÚOrderé   )Úgruntzc                 ó>   — t        | |||«      j                  d¬«      S )aQ  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       úV/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/sympy/series/limits.pyÚlimitr$      s$   € ôf ��A�r˜3Ó×$Ñ$¨%Ð$Ó0Ð0ó    c                 ób  — d}|t         j                  u rBt        | j                  |d|z  «      |t         j                  d«      }t        |t        «      ry|S | j                  s%| j                  s| j                  s| j                  �rg }ddlm} | j                  D ]ä  }t        ||||«      }|j                  t         j                  «      r~|j                  €rt        | t         «      r`t#        | «      }	t        |	t$        «      s ||	«      }	t        |	t$        «      st'        | «      }	t        |	t$        «      rt)        |	|||«      c S  y yt        |t        «      r y|t         j*                  u r y|j-                  |«       Œæ |�r | j.                  |Ž }|t         j*                  u r²| j                  r¦t1        d„ |D «       «      r”g }
g }t3        |«      D ]E  \  }}t        |t4        «      r|
j-                  |«       Œ(|j-                  | j                  |   «       ŒG t7        |«      dkD  r/t%        |Ž j9                  «       }t        ||||«      }|t%        |
Ž z  }|t         j*                  u r5	 ddlm}  || «      }|t         j*                  u s|| k(  ryt        ||||«      S |S # t>        $ r Y yw xY w)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   ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)Ú
isinstancer   )Ú.0Úrrs     r#   ú	<genexpr>zheuristics.<locals>.<genexpr>h   s   è ø€ Ò/XÐPR´
¸2¼{×0KÑ/Xùs   ‚)Úratsimp) r   ÚInfinityr$   ÚsubsÚZeror+   r   Úis_MulÚis_AddÚis_PowÚis_FunctionÚsympy.simplify.simplifyr(   ÚargsÚhasÚ	is_finiter   r   r
   r   Ú
heuristicsÚNaNÚappendÚfuncÚanyÚ	enumerater   ÚlenÚsimplifyÚsympy.simplify.ratsimpr/   r   )r   r    r!   r"   ÚrvÚrr(   ÚaÚlÚmÚr2Úe2ÚiiÚrvalÚe3r/   Úrat_es                    r#   r;   r;   C   sA  € ð 
€BØ	ŒQ�Z‰ZÑÜ�1—6‘6˜!˜Q˜q™S“> 1¤a§f¡f¨cÓ2ˆÜ�bœ%Ô Øð` €Ið_ 
�Š�Q—X’X §¢¨Q¯]«]ØˆÝ4Ø—‘ò 	ˆAÜ�a˜˜B Ó$ˆAØ�u‰u”Q—Z‘ZÔ  Q§[¡[Ð%8Ü˜a¤Ô%Ü$ Q›�AÜ% a¬Ô-Ù$ Q›K˜Ü% a¬Ô-Ü" 1›I˜Ü! !¤SÔ)Ü)¨!¨Q°°CÓ8Ò8ÙÙÜ˜AœuÔ%ÙØ”a—e‘e‘Ùà—‘˜•ð%	ò& Ø�—‘˜�ˆBØ”Q—U‘U‰{˜qŸxšx¬CÑ/XÐVWÔ/XÔ,XØ�Ø�Ü )¨!£ò .‘H�B˜Ü! $¬Ô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 r¨3Ó/Ð/Ø€Iøô 'ò Ùðús   É,J" Ê"	J.Ê-J.c                   ó4   — e Zd ZdZdd„Zed„ «       Zd„ Zd„ Zy)r   a  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                 ó`  — t        |«      }t        |«      }t        |«      }|t        j                  t        j                  t        j                  z  fv rd}n5|t        j                  t        j                  t        j                  z  fv rd}|j                  |«      rt        d|›d|›d�«      ‚t        |t        «      rt        |«      }n't        |t        «      st        dt        |«      z  «      ‚t        |«      dvrt        d|z  «      ‚t        j                  | «      }||||f|_        |S )	Nú-r'   z7Limits approaching a variable point are not supported (z -> ú)z6direction must be of type basestring or Symbol, not %s)r'   rQ   ú+-z1direction must be one of '+', '-' or '+-', not %s)r   r   r0   ÚImaginaryUnitÚNegativeInfinityr9   ÚNotImplementedErrorr+   Ústrr   Ú	TypeErrorÚtypeÚ
ValueErrorr   Ú__new__Ú_args)Úclsr   r    r!   r"   Úobjs         r#   r[   z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Ý%Ú34²bð':ó ;ð ;ä�cœ3ÔÜ˜“+‰CÜ˜C¤Ô(Üð %Ü'+¨C£yñ1ó 2ð 2äˆs‹8Ð+Ñ+Üð &Ø(+ñ,ó -ð -ô �l‰l˜3ÓˆØ˜˜2˜s�OˆŒ	Øˆ
r%   c                 óÜ   — | j                   d   }|j                  }|j                  | j                   d   j                  «       |j                  | j                   d   j                  «       |S )Nr   r   é   )r8   Úfree_symbolsÚdifference_updateÚupdate)Úselfr   Úisymss      r#   ra   zLimit.free_symbols¬   sS   € à�I‰I�a‰LˆØ—‘ˆØ×Ñ §	¡	¨!¡× 9Ñ 9Ô:Ø�‰�T—Y‘Y˜q‘\×.Ñ.Ô/Øˆr%   c                 ó  — | j                   \  }}}}|j                  |j                  }}|j                  |«      s$t	        |t        |«      z  ||«      }t        |«      S t	        |||«      }t	        |||«      }	|	t        j                  u r@|t        j                  t        j                  fv rt	        ||dz
  z  ||«      }t        |«      S |	t        j                  u r#|t        j                  u rt        j                  S y y )Nr   )r8   Úbaser   r9   r$   r   r   ÚOner0   rU   ÚComplexInfinity)
rd   r   Ú_r    r!   Úb1Úe1ÚresÚex_limÚbase_lims
             r#   Úpow_heuristicszLimit.pow_heuristicsµ   sÚ   € Ø—i‘i‰ˆˆ1ˆb�!Ø—‘˜Ÿ™ˆBˆØ�v‰v�aŒyÜ˜œ3˜r›7™
 A rÓ*ˆCÜ�s“8ˆOä�r˜1˜bÓ!ˆÜ˜˜Q Ó#ˆà”q—u‘uÑØœ!Ÿ*™*¤a×&8Ñ&8Ð9Ñ9Ü˜B  Q¡™K¨¨BÓ/�Ü˜3“x�Ø”q×)Ñ)Ñ)¨f¼¿
¹
Ñ.BÜ×$Ñ$Ð$ð /CÐ)r%   c           	      óÀ  ‡‡‡‡— | j                   \  }ŠŠŠt        ‰«      dk(  rŸt        |‰‰d¬«      }t        |‰‰d¬«      }t        |t        «      r1t        |t        «      r!|j                   d   |j                   d   k(  r| S ||k(  r|S |j
                  r|j
                  rt        j                  S t        d|›d|›�«      ‚‰t        j                  u rt        d«      ‚‰j
                  r@t        ‰«      }|t        |«      z  }|j                  ‰|‰z  «      }dŠt        j                  Š|j                  d	d
«      r6 |j                  di |¤Ž} ‰j                  di |¤ŽŠ ‰j                  di |¤ŽŠ|‰k(  r‰S |j!                  ‰«      s|S ‰t        j"                  u rt        j"                  S  |j                   t$        Ž r| S |j&                  r.t)        t        |j*                  ‰‰«      g|j                   dd ¢­Ž S d}t        ‰«      dk(  rd}nt        ‰«      dk(  rd}ˆˆˆˆfd„Š|j!                  t,        «      rddlm}  ||«      } ‰|«      }|j3                  ‰‰«      rÓ‰t        j                  u r|j                  ‰d‰z  «      }| }n|j                  ‰‰‰z   «      }	 |j5                  ‰|¬«      \  }}	|	dkD  rt        j6                  S |	dk(  r|S |dk(  st9        |	«      dz  st        j                  t        |«      z  S |dk(  rt        j:                  t        |«      z  S t        j                  S ‰t        j                  u r0|j<                  rt?        |«      }|j                  ‰d‰z  «      }| }n|j                  ‰‰‰z   «      }	 |j5                  ‰|¬«      \  }}	t        |t@        «      r|	t        j6                  k(  r|S |j!                  t        j                  t        j:                  t        j                  t        j"                  «      r| S |j!                  ‰«      s´|	jB                  rt        j6                  S |	dk(  r|S |	jD                  rw|dk(  rt        j                  t        |«      z  S |dk(  rAt        j:                  t        |«      z  t        jF                  t        jH                  |	z   z  z  S t        j                  S t        d|	z  «      ‚‰j^                  r|ja                  tb        td        «      }d}	 t[        |‰‰‰«      }|t        j"                  u s|t        j"                  u r
tK        «       ‚	 |S # t        $ r Y �Œw xY w# t        t        tJ        f$ rÄ ddl&m'}
  |
|«      }|jP                  r| jS                  |«      }|�|cY S 	 |jU                  ‰|¬«      }||k7  r[|j!                  tV        «      s|j!                  t        jX                  «      r't[        |‰dt]        |«      jD                  rdnd«      cY S n# t        t        tJ        f$ r Y nw xY wY �ŒOw xY w# tJ        t        f$ r |�‚ tg        |‰‰‰«      }|€| cY S Y |S w xY w)aP  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.
        rS   r'   )r"   rQ   r   z1The limit does not exist since left hand limit = z and right hand limit = z.Limits at complex infinity are not implementedr   Tr   Néÿÿÿÿc                 ó˜  •— | j                   s| S t        ˆfd„| j                   D «       «      }|| j                   k7  r | j                  |Ž } t        | t        «      }t        | t
        «      }t        | t        «      }|s|s|rÈt        | j                   d   ‰‰	‰«      }|j                  rt        d| j                   d   z  ‰‰	‰«      }|j                  rw|dk  dk(  r4|r| j                   d    S |rt        j                  S t        j                  S |dkD  dk(  r3|r| j                   d   S |rt        j                  S t        j                  S | S )Nc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wr*   © )r,   r   Ú	set_signss     €r#   r.   z0Limit.doit.<locals>.set_signs.<locals>.<genexpr>  s   øè ø€ Ò@¨s™I cŸNÑ@ùs   ƒr   r   T)r8   Útupler>   r+   r   r   r   r$   Úis_zeroÚis_extended_realr   ÚNegativeOneÚPirh   r2   )
ÚexprÚnewargsÚabs_flagÚarg_flagÚ	sign_flagÚsigr"   rv   r    r!   s
         €€€€r#   rv   zLimit.doit.<locals>.set_signs
  s+  ø€ Ø—9’9Ø�ÜÓ@°d·i±iÔ@Ó@ˆGØ˜$Ÿ)™)Ò#Ø �t—y‘y 'Ð*�Ü! $¬Ó,ˆHÜ! $¬Ó,ˆHÜ" 4¬Ó.ˆIÙ™9©Ü˜DŸI™I a™L¨!¨R°Ó5�Ø—;’;Ü  $§)¡)¨A¡,¡°°2°sÓ;�CØ×'Ò'Ø˜a™ DÒ(Ù19 §¡¨1¡ ð FÙ1:¤§¡ðFÜ@AÇÁðFà ™' dÒ*Ù08 §	¡	¨!¡ð @Ù)2¤§¡ð@Ü89¿¹ð@àˆKr%   )Ú	nsimplify)ÚcdirzNot sure of sign of %s)Úpowsimpru   )4r8   rW   r$   r+   r   Úis_infiniter   ri   rZ   rV   r   Úabsr1   r0   Úgetr   r9   r<   r   Úis_Orderr   r|   r   r7   r‚   Úis_meromorphicÚleadtermr2   ÚintrU   r3   r   r   Úis_positiveÚis_negativerz   rh   r	   Úsympy.simplify.powsimpr„   r5   rp   Úas_leading_termr   ÚExp1r   r   Úis_extended_positiveÚrewriter   r   r;   )rd   Úhintsr   rE   rG   rƒ   r‚   ÚneweÚcoeffÚexr„   r"   rv   r    r!   s              @@@@r#   r   z
Limit.doitÇ   s›  û€ ð Ÿ	™	‰ˆˆ1ˆb�#äˆs‹8�tÒÜ�a˜˜B CÔ(ˆAÜ�a˜˜B CÔ(ˆAÜ˜!œUÔ#¬
°1´eÔ(<Ø—6‘6˜!‘9 §¡ q¡	Ò)Ø�KØ�AŠ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ØˆHà”—‘‰;Ü—5‘5ˆLàˆ1�5‰5”(ÑØˆKà�:Š:Üœ˜qŸv™v q¨"Ó-Ð;°·±°q°r°
Ò;Ð;àˆÜˆs‹8�sŠ?Ø‰DÜ�‹X˜Š_ØˆD÷	ð, �5‰5”Œ<õ
 :Ù˜!“ˆAÙ�a‹Lˆð ×Ñ˜A˜rÔ"Ø”Q—Z‘ZÑØ—v‘v˜a  1¡“~�à�u‘à—v‘v˜a  R¡Ó(�ð-Ø ŸM™M¨!°$˜MÓ7‘	��rð ˜’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�Ø—6‘6˜!˜Q˜q™S“>ˆDà�5‰Dà—6‘6˜!˜Q ™VÓ$ˆDð"	MØŸ™ a¨d˜Ó3‰IˆE�2ô  ˜%¤Ô-°"¼¿¹²,Ø�Ø�y‰yœŸ™¤Q×%7Ñ%7¼×9JÑ9JÌAÏEÉEÔRØ�Ø—9‘9˜Q”<Ø—>’>ÜŸ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Ð!ð (ð ˆøô] ò Úðûô0 Ô/´Ð;ò 	å6Ù˜“
ˆAØ�xŠxØ×'Ñ'¨Ó*�Ø�=Ø’HðØ×,Ñ,¨Q°TÐ,Ó:�Ø˜D’= e§i¡i´¤n¸¿	¹	Ä!Ç&Á&Ô8IÜ! %¨¨A´b¸³h×6JÒ6J©sÐPSÓTÒTùÜÔ 3´YÐ?ò Ùðýð	ûô^ œ:Ð&ò 	Øˆ}ØÜ˜1˜a  SÓ)ˆAØˆyØ’ð ð ˆð	úsb   Ê(U ÎU Ô	<X3 Õ	UÕUÕAX0ÖA0XØX0ØX0ØX)Ø&X0Ø(X)Ø)X0Ø/X0Ø3$YÙYN©r'   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r[   Úpropertyra   rp   r   ru   r%   r#   r   r   ‚   s+   „ ñóð6 ñó ðò%ó$zr%   r   Nr—   )$Ú!sympy.calculus.accumulationboundsr   Ú
sympy.corer   r   r   r   r   r	   r
   Úsympy.core.exprtoolsr   Úsympy.core.numbersr   r   Ú(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   ru   r%   r#   ú<module>r§      sI   ðÝ 9ß D× DÑ DÝ -ß .Ý >ß EÓ Eß =Ý 9ß /Ý $Ý ó31òl<ô~ˆDõ r%   