ó
    Ñ]jÇ  ã                  ó²   • S r SSKJr  SSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSK
JrJr  SSKJr   " S	 S
\5      rSS jr S SS jjrSSS jjrSSS jjrg)zToken-related utilitiesé    )ÚannotationsN)ÚStringIO)Ú	iskeyword)Ú	TokenInfo)ÚCallableÚ
NamedTuple)Ú	Generatorc                  óH   • \ rS rSr% S\S'   S\S'   S\S'   S\S'   S\S'   S	rg
)ÚTokené   ÚintÚtokenÚstrÚtextÚstartÚendÚline© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/IPython/utils/tokenutil.pyr   r      s   ‡ ØƒJØ
ƒIØƒJØ	ƒHØ
†Ir   r   c              #  ó‚   #   •  [         R                  " U 5       Sh  v•N   g N! [         R                   a     gf = f7f)z'wrap generate_tkens to catch EOF errorsN)ÚtokenizeÚgenerate_tokensÚ
TokenError)Úreadlines    r   r   r      s5   é € ðÜ×+Ò+¨HÓ5×5Ó5øÜ×Ñó áðüs(   ‚?„% �#ž% ¢?£% ¥<¹?»<¼?c              #  ó  ^	#   • / SQnUb  [        U[        5      (       d   eX!=(       d    / -   n/ n [        R                  " U 5       H  nUR	                  U5        Uv •  M     g ! [        R
                   a…  m	[        U	4S jU 5       5      (       ae  U(       a6  US   R                  S   US   R                  S   4nUnUS   R                  nOS=pgSn[        [        R                  SXgU5      v •   S m	@	g e S m	@	ff = f7f)N)zunterminated string literalzinvalid non-printable characterz!after line continuation characterc              3  óF   >#   • U  H  oTR                   S    ;   v •  M     g7f)r   N)Úargs)Ú.0ÚerrorÚexcs     €r   Ú	<genexpr>Ú/generate_tokens_catch_errors.<locals>.<genexpr>2   s   øé € ÐA²¨˜Ÿ™ ™Ö#²ùs   ƒ!éÿÿÿÿr   )é   r   Ú )Ú
isinstanceÚlistr   r   Úappendr    Úanyr   r   r   r   Ú
ERRORTOKEN)
r!   Úextra_errors_to_catchÚdefault_errors_to_catchÚerrors_to_catchÚtokensr   r   r   r   r'   s
            @r   Úgenerate_tokens_catch_errorsr6   !   sò   øé € òÐð
 !Ñ(¬JÐ7LÌd×,SÑ,SÐSÐSØ-×1LÈ"ÑM€Oà €FðÜ×-Ò-¨hÖ7ˆEØ�M‰M˜%Ô ØŒKò 8øô ×Ñó ÜÔA±ÓA×AÑAÞØ˜r™
×(Ñ(¨Ñ+¨V°B©Z¯^©^¸AÑ->Ð>�Ø�Ø˜b‘z—‘‘à$Ð$�Ø�ÜœH×/Ñ/°°UÀÓF×Fð ûðüs5   ƒ.D²2A% Á$DÁ%C>Á9A:C9Ã3DÃ8C9Ã9C>Ã>Dc                ó¬   • SnU R                  S5      nU H7  nU[        U5      -   nUR                  S5      (       d  US-  nXQ:”  a    XB4$ UnM9     SnXB4$ )ax  Return the line in a cell at a given cursor position

Used for calling line-based APIs that don't support multi-line input, yet.

Parameters
----------
cell : str
    multiline block of text
cursor_pos : integer
    the cursor position

Returns
-------
(line, offset): (string, integer)
    The line with the current cursor, and the character offset of the start of the line.
r   TÚ
r+   r,   )Ú
splitlinesÚlenÚendswith)ÚcellÚ
cursor_posÚoffsetÚlinesr   Únext_offsets         r   Úline_at_cursorrA   @   ss   € ð" €FØ�O‰O˜DÓ!€EÛˆØœs 4›yÑ(ˆØ�}‰}˜T×"Ñ"ð ˜1ÑˆKØÓ#Øð ˆ<Ðð Šñ ð ˆØˆ<Ðr   c                óÖ  • / n/ nSnSnSS0nSnSn[        [        U 5      R                  5       V	s/ s H  n	[        U	6 PM     n
n	U
(       d  g[	        S/U
-   [
        R                  " U
S/-   5      5       GH.  u  nu  pÍUR                  u  pïUR                  u  nnUS-   U;  aS  UR                  R                  S5      n[        UUS-   5       H%  u  nnUU;  d  M  UUS-
     [        U5      -   UU'   M'     SnXn   nUU-   U:”  a    GOŸUR                  [        R                  :H  =(       a    [!        UR"                  5      (       + =n(       aË  U(       aO  U(       aH  UR                  [        R$                  :X  a*  UR"                  S:X  a  US   < SUR"                  < 3US'   OUR'                  UR"                  5        UbA  UR                  [        R$                  :X  a#  UR"                  S	:X  a  UR)                  S5        SnU(       d  U(       a  US   OSnOrUR                  [        R$                  :X  aT  UR"                  S
:X  a  U(       a  UR'                  US   5        O(UR"                  S:X  a  U(       a  UR)                  S5      nUU   U-   U:”  d  GM%  Xn   U-   U:*  n  O   U(       a  U(       a  US   $ U(       a  U$ U(       a  US   $ U(       a  U$ U(       a  US   $ gs  sn	f )aN  Get the token at a given cursor

Used for introspection.

Function calls are prioritized, so the token for the callable will be returned
if the cursor is anywhere inside the call.

Parameters
----------
cell : str
    A block of Python code
cursor_pos : int
    The location of the cursor in the block where the token should be found
Nr+   r   Fr,   TÚ.r*   Ú=Ú(Ú))r   r   r!   r   ÚzipÚ	itertoolsÚpairwiser   r   r   r9   Ú	enumerater:   r   r   ÚNAMEr   r   ÚOPr/   Úpop)r<   r=   ÚnamesÚ
call_namesÚclosing_call_nameÚmost_recent_outer_nameÚoffsetsÚintersects_with_cursorÚcur_token_is_nameÚtupr5   Úprev_tokÚtokÚnext_tokÚ
start_lineÚ	start_colÚend_lineÚend_colr?   Úlinenor   r>   s                         r   Útoken_at_cursorr^   b   s±  € ð €EØ€JØ$(ÐØ)-Ðà�!ˆf€GØ"ÐØÐä.¬x¸«~×/FÑ/FÔGó"ÚG˜Œˆs‹ÑGð ð "ö ØÜ%(Ø	ˆ�‰œ×+Ò+¨F°d°V©OÓ<÷&Ñ!ˆ‘/�3ð !$§	¡	Ñˆ
ØŸG™GÑˆ�'Ø�a‰<˜wÓ&à—H‘H×'Ñ'¨Ó-ˆEÜ )¨%°¸a±Ö @‘�˜Ø Õ(Ø&-¨f°q©jÑ&9¼CÀ»IÑ&E�G˜F“Oñ !Að !ÐàÑ$ˆØ�IÑ 
Ó*ò à #§	¡	¬X¯]©]Ñ :× VÄ9ÈSÏXÉXÓCVÔ?VÐVÐÕVæÞØ—N‘N¤h§k¡kÓ1Ø—M‘M SÓ(à',¨R¤y°#·(³(Ð;��b’	à—‘˜SŸX™XÔ&àÑ$Ø—N‘N¤h§k¡kÓ1Ø—M‘M SÓ(ð —	‘	˜"”Ø$)Ð!ÞÞ6;¨¨rªÀÐ&øØ�Y‰Yœ(Ÿ+™+Ó%Ø�x‰x˜3‹¦5à×!Ñ! %¨¡)Õ,Ø—‘˜S“¦Zà$.§N¡N°2Ó$6Ð!à�8Ñ˜wÑ&¨Ö3ð &-Ñ%8¸9Ñ%DÈ
Ñ%RÐ"Ùñk&ön Ö3Ø�R‰yÐö 
à Ð Þ	à˜"‰~ÐÞ	ð &Ð%Þ	à�R‰yÐð ùò_"s   ±K&)r!   r   Úreturnz Generator[TokenInfo, None, None])N)r2   zlist[str] | None)r   )r<   r   r=   r   r_   ztuple[str, int])r<   r   r=   r   r_   r   )Ú__doc__Ú
__future__r   rH   r   Úior   Úkeywordr   r   Útypingr   r   Úcollections.abcr	   r   r   r6   rA   r^   r   r   r   Ú<module>rf      sQ   ðÙ õ #ã Û Ý Ý Ý ß 'Ý %ôˆJô ôð 9=ðØ%5õö>÷Dfr   