§
    ¬³Ùg+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#dS )é    )ÚAccumBounds)ÚSÚSymbolÚAddÚsympifyÚExprÚ	PoleErrorÚMul)Úfactor_terms)ÚFloatÚ_illegal)Ú	factorial)ÚAbsÚsignÚargÚre)ÚexpÚlog)Úgamma)ÚPolynomialErrorÚfactor)ÚOrderé   )Úgruntzú+c                 óN   — t          | |||¦  «                             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       úI/granary/edev/quantum/lib/python3.11/site-packages/sympy/series/limits.pyÚlimitr%      s*   € õf ��A�r˜3ÑÔ×$Ò$¨%Ð$Ñ0Ô0Ð0ó    c                 óÄ  — d}|t           j        u rLt          |                      |d|z  ¦  «        |t           j        d¦  «        }t          |t          ¦  «        rdS �nƒ| j        s| j        s| j	        s| j
        �rfg }ddlm} | j        D �]}t          ||||¦  «        }|                     t           j        ¦  «        rž|j        €—t          | t           ¦  «        rt#          | ¦  «        }	t          |	t$          ¦  «        s ||	¦  «        }	t          |	t$          ¦  «        st'          | ¦  «        }	t          |	t$          ¦  «        rt)          |	|||¦  «        c S  dS  dS t          |t          ¦  «        r dS |t           j        u r dS |                     |¦  «         �Œ|�rB | j        |Ž }|t           j        u rÐ| j        rÉt1          d„ |D ¦   «         ¦  «        r°g }
g }t3          |¦  «        D ]P\  }}t          |t4          ¦  «        r|
                     |¦  «         Œ0|                     | j        |         ¦  «         ŒQt7          |¦  «        dk    r9t%          |Ž                      ¦   «         }t          ||||¦  «        }|t%          |
Ž z  }|t           j        u rL	 ddlm}  || ¦  «        }n# t>          $ r Y dS w xY w|t           j        u s|| k    rdS t          ||||¦  «        S |S )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   r   )Útogetherc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S ©N)Ú
isinstancer   )Ú.0Úrrs     r$   ú	<genexpr>zheuristics.<locals>.<genexpr>h   s-   è è € Ð/XÐ/XÐPRµ
¸2½{Ñ0KÔ0KÐ/XÐ/XÐ/XÐ/XÐ/XÐ/Xr&   )Ú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   s  € ð 
€BØ	�QŒZÐÐÝ�1—6’6˜!˜Q˜q™S‘>”> 1¥a¤f¨cÑ2Ô2ˆÝ�b�%Ñ Ô ð 	ØˆFñ	à	
Œð .0�Q”Xð .0 ¤ð .0¨Q¬]ñ .0ØˆØ4Ð4Ð4Ð4Ð4Ð4Ø”ð 	ñ 	ˆAÝ�a˜˜B Ñ$Ô$ˆAØ�uŠu•Q”ZÑ Ô ð  Q¤[Ð%8Ý˜a¥Ñ%Ô%ð Ý$ Q™œ�AÝ% a­Ñ-Ô-ð (Ø$˜H Q™KœK˜Ý% a­Ñ-Ô-ð &Ý" 1™IœI˜Ý! !¥SÑ)Ô)ð 9Ý)¨!¨Q°°CÑ8Ô8Ð8Ð8Ð8Ø�F�FØ��Ý˜A�uÑ%Ô%ð Ø��Ø•a”e��Ø��à—’˜‘”�‘Øñ 	0Ø�”˜�ˆBØ•Q”Uˆ{ˆ{˜qœxˆ{­CÐ/XÐ/XÐVWÐ/XÑ/XÔ/XÑ,XÔ,Xˆ{Ø�Ø�Ý )¨!¡¤ð .ð .‘H�B˜Ý! $­Ñ4Ô4ð .ØŸ	š	 $™œ˜˜àŸ	š	 !¤&¨¤*Ñ-Ô-Ð-Ð-å�r‘7”7˜Q’;�;Ý˜b˜×*Ò*Ñ,Ô,�BÝ˜b ! R¨Ñ-Ô-�AØ�S "˜X™�Bà•Q”Uˆ{ˆ{ðØ>Ð>Ð>Ð>Ð>Ð>Ø#˜G A™JœJ�E�EøÝ&ð ð ð Ø�F�Fðøøøà�AœE�>�> U¨a¢Z ZØ�FÝ˜U A r¨3Ñ/Ô/Ð/Ø€Is   ÊJ' Ê'
J5Ê4J5c                   ó<   — e Zd ZdZdd„Zed„ ¦   «         Zd„ Zd„ ZdS )	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='-')

    r   c                 ó’  — t          |¦  «        }t          |¦  «        }t          |¦  «        }|t          j        t          j        t          j        z  fv rd}n)|t          j        t          j        t          j        z  fv rd}|                     |¦  «        rt          d|›d|›d�¦  «        ‚t          |t          ¦  «        rt          |¦  «        }n4t          |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__‘   sL  € Ý�A‰JŒJˆÝ�A‰JŒJˆÝ�R‰[Œ[ˆà•!”*�aœo­a¬jÑ8Ð9Ð9Ð9ØˆCˆCØ•AÔ&­¬½Ô8JÑ(JÐKÐKÐKØˆCà�6Š6�!‰9Œ9ð 	;Ý%Ð%Ø34°1°1°b°b°bð':ñ ;ô ;ð ;å�c�3ÑÔð 	2Ý˜‘+”+ˆCˆCÝ˜C¥Ñ(Ô(ð 	2Ýð %Ý'+¨C¡y¤yñ1ñ 2ô 2ð 2åˆs‰8Œ8Ð+Ð+Ð+Ýð &Ø(+ñ,ñ -ô -ð -õ Œl˜3ÑÔˆØ˜˜2˜s�OˆŒ	Øˆ
r&   c                 óÂ   — | j         d         }|j        }|                     | j         d         j        ¦  «         |                     | j         d         j        ¦  «         |S )Nr   r   é   )r8   Úfree_symbolsÚdifference_updateÚupdate)Úselfr    Úisymss      r$   ra   zLimit.free_symbols¬   sQ   € àŒI�aŒLˆØ”ˆØ×Ò ¤	¨!¤Ô 9Ñ:Ô:Ð:Ø�Š�T”Y˜q”\Ô.Ñ/Ô/Ð/Øˆr&   c                 óø  — | j         \  }}}}|j        |j        }}|                     |¦  «        s0t	          |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 d S d S )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‰ˆˆ1ˆb�!Ø”˜œˆBˆØ�vŠv�a‰yŒyð 	Ý˜�3˜r™7œ7™
 A rÑ*Ô*ˆCÝ�s‘8”8ˆOå�r˜1˜bÑ!Ô!ˆÝ˜˜Q Ñ#Ô#ˆà•q”uÐÐØ�!œ*¥aÔ&8Ð9Ð9Ð9Ý˜B  Q¡™K¨¨BÑ/Ô/�Ý˜3‘x”x�Ø•qÔ)Ð)Ð)¨f½¼
Ð.BÐ.BÝÔ$Ð$ð *Ð)Ð.BÐ.Br&   c           	      óø  ‡‡‡‡— | j         \  }ŠŠŠt          ‰¦  «        dk    r¥t          |‰‰d¬¦  «        }t          |‰‰d¬¦  «        }t          |t          ¦  «        r3t          |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        rHt          ‰¦  «        }|t          |¦  «        z  }|                     ‰|‰z  ¦  «        }dŠt          j        Š|                     d	d
¦  «        r' |j        di |¤Ž} ‰j        di |¤ŽŠ ‰j        di |¤ŽŠ|‰k    r‰S |                     ‰¦  «        s|S ‰t          j        u rt          j        S  |j        t$          Ž r| S |j        r.t)          t          |j        ‰‰¦  «        g|j         dd…         ¢R Ž S d}t          ‰¦  «        dk    rd}nt          ‰¦  «        dk    rd}ˆˆˆˆfd„Š|                     t,          ¦  «        rddlm}  ||¦  «        } ‰|¦  «        }|                     ‰‰¦  «        rë‰t          j        u r|                     ‰d‰z  ¦  «        }| }n|                     ‰‰‰z   ¦  «        }	 |                     ‰|¬¦  «        \  }}	|	dk    rt          j        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          $ r Y nw xY w‰t          j        u r3|j        rt?          |¦  «        }|                     ‰d‰z  ¦  «        }| }n|                     ‰‰‰z   ¦  «        }	 |                     ‰|¬¦  «        \  }}	t          |t@          ¦  «        r|	t          j        k    r|S |                     t          j        t          j        t          j        t          j        ¦  «        r| S |                     ‰¦  «        s¡|	j!        rt          j        S |	dk    r|S |	j"        rm|dk    rt          j        t          |¦  «        z  S |dk    r9t          j        t          |¦  «        z  t          j#        t          j$        |	z   z  z  S t          j        S t          d|	z  ¦  «        ‚nï# t          t          tJ          f$ rÕ ddl&m'}
  |
|¦  «        }|j(        r|  )                    |¦  «        }|�|cY S 	 | *                    ‰|¬¦  «        }||k    rc|                     tV          ¦  «        s|                     t          j,        ¦  «        r*t[          |‰dt]          |¦  «        j"        rdnd¦  «        cY S n# t          t          tJ          f$ r Y nw xY wY nw xY w‰j/        r | 0                    tb          td          ¦  «        }d}	 t[          |‰‰‰¦  «        }|t          j        u s|t          j        u rtK          ¦   «         ‚n2# tJ          t          f$ r |�‚ tg          |‰‰‰¦  «        }|€| cY S Y nw xY w|S )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                 ór  •— | j         s| S t          ˆfd„| j         D ¦   «         ¦  «        }|| j         k    r
 | j        |Ž } t          | t          ¦  «        }t          | t
          ¦  «        }t          | t          ¦  «        }|s|s|r²t          | j         d         ‰‰	‰¦  «        }|j        r t          d| j         d         z  ‰‰	‰¦  «        }|j	        rg|dk     dk    r*|r| j         d          n|rt          j        nt          j        S |dk    dk    r)|r| j         d         n|rt          j        nt          j        S | S )Nc              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S r*   © )r,   r   Ú	set_signss     €r$   r.   z0Limit.doit.<locals>.set_signs.<locals>.<genexpr>  s+   øè è € Ð@Ð@¨s˜I˜I c™NœNÐ@Ð@Ð@Ð@Ð@Ð@r&   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
  sY  ø€ Ø”9ð Ø�ÝÐ@Ð@Ð@Ð@°d´iÐ@Ñ@Ô@Ñ@Ô@ˆGØ˜$œ)Ò#Ð#Ø �t”y 'Ð*�Ý! $­Ñ,Ô,ˆHÝ! $­Ñ,Ô,ˆHÝ" 4­Ñ.Ô.ˆIØð 
@˜9ð 
@¨ð 
@Ý˜DœI aœL¨!¨R°Ñ5Ô5�Ø”;ð <Ý  $¤)¨A¤,¡°°2°sÑ;Ô;�CØÔ'ð @Ø˜aš DÒ(Ð(Ø19ð !E ¤¨1¤  Ø1:Ð D¥¤ ÅÄðFà š' dÒ*Ð*Ø08ð !? ¤	¨!¤ Ø)2Ð >¥¤ ½¼ð@àˆ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Œ8�tÒÐÝ�a˜˜B CÐ(Ñ(Ô(ˆAÝ�a˜˜B CÐ(Ñ(Ô(ˆAÝ˜!�UÑ#Ô#ð  ­
°1µeÑ(<Ô(<ð  Ø”6˜!”9 ¤ q¤	Ò)Ð)Ø�KØ�AŠvˆvØ�ØŒ}ð ) ¤ð )ÝÔ(Ð(Ý�*à !   1 1ð&ñ 'ô 'ð 'ð •Ô"Ð"Ð"Ý%ð 'Cñ Dô Dð Dð Œ>ð 	Ý˜‘8”8ˆDØ�˜D™	œ	‘>ˆDØ—’�q˜$˜q™&Ñ!Ô!ˆAØˆCÝ”ˆBà�9Š9�V˜TÑ"Ô"ð 	"Ø�”��˜��ˆAØ�”��˜��ˆAØ�”Ð!Ð!˜5Ð!Ð!ˆBà�Š6ˆ6ØˆIà�uŠu�Q‰xŒxð 	ØˆHà•”ˆ;ˆ;Ý”5ˆLàˆ1Œ5•(Ðð 	ØˆKàŒ:ð 	<Ý�˜qœv q¨"Ñ-Ô-Ð;°´°q°r°r´
Ð;Ð;Ð;Ð;àˆÝˆs‰8Œ8�sŠ?ˆ?ØˆDˆDÝ�‰XŒX˜Š_ˆ_ØˆDð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð, �5Š5•‰<Œ<ð 	ð
 :Ð9Ð9Ð9Ð9Ð9Ø�	˜!‘”ˆAØˆI�a‰LŒLˆð ×Ò˜A˜rÑ"Ô"ð 	-Ø•Q”ZÐÐØ—v’v˜a  1¡‘~”~�à�u��à—v’v˜a  R¡Ñ(Ô(�ð-Ø ŸMšM¨!°$˜MÑ7Ô7‘	��rð ˜’6�6Ýœ6�MØ˜1’W�WØ �LØ˜1’9�9¥C¨¡G¤G¨a¡K�9Ýœ:¥d¨5¡k¤kÑ1Ð1Ø˜R’Z�ZÝÔ-­d°5©k¬kÑ9Ð9åÔ,Ð,øõ ð ð ð Ø�ðøøøð •”ÐÐØŒxð $Ý  ‘O”O�Ø—6’6˜!˜Q˜q™S‘>”>ˆDà�5ˆDˆDà—6’6˜!˜Q ™VÑ$Ô$ˆDð"	MØŸš a¨d˜Ñ3Ô3‰IˆE�2õ  ˜%¥Ñ-Ô-ð °"½¼²,°,Ø�Ø�yŠy�œ¥QÔ%7½Ô9JÍAÌEÑRÔRð Ø�Ø—9’9˜Q‘<”<ð MØ”>ð MÝœ6�MØ˜1’W�WØ �LØ”^ð MØ˜q’y�yÝ œz­$¨u©+¬+Ñ5Ð5Ø š˜Ý Ô1µ$°u±+´+Ñ=½a¼mÍaÌeÐVXÉjÑ>YÑYÐYå Ô0Ð0å-Ð.FÈÑ.KÑLÔLÐLðMøõ' Õ/µÐ;ð 	ð 	ð 	à6Ð6Ð6Ð6Ð6Ð6Ø�˜‘
”
ˆAØŒxð Ø×'Ò'¨Ñ*Ô*�Ø�=Ø�H�H�HðØ×,Ò,¨Q°TÐ,Ñ:Ô:�Ø˜D’=�= e§i¢iµ¡n¤n�=¸¿	º	Å!Ä&Ñ8IÔ8I�=Ý! %¨¨Aµb¸±h´hÔ6JÐ/S¨s¨sÐPSÑTÔTÐTÐTÐTøøÝÕ 3µYÐ?ð ð ð Ø�ðøøøøøð	øøøðL Ô"ð 	,Ø—	’	�)¥UÑ+Ô+ˆAàˆð		Ý�q˜!˜R Ñ%Ô%ˆAØ•A”Eˆzˆz˜Q¥!¤%˜Z˜ZÝ‘k”kÐ!ð (øå�:Ð&ð 	ð 	ð 	Øˆ}ØÝ˜1˜a  SÑ)Ô)ˆAØˆyØ���ð ˆyð		øøøð ˆsb   Ê7M Í
MÍMÎ8S2 Ó2AWÔ=A=V>Ö:WÖ=WÖ>W×W×W×W×WØ<Y Ù*Y7Ù6Y7N©r   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r[   Úpropertyra   rp   r   ru   r&   r$   r   r   ‚   sp   € € € € € ðð ðð ð ð ð6 ðð ñ „Xðð%ð %ð %ð$zð zð zð zð 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§      sv  ðØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ -Ð -Ð -Ð -Ð -Ð -Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø >Ð >Ð >Ð >Ð >Ð >Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ =Ð =Ð =Ð =Ð =Ð =Ð =Ð =Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð ð31ð 31ð 31ð 31ðl<ð <ð <ð~ð ð ð ð ˆDñ ô ð ð ð r&   