ó
    Ñ]j  ã                  ó¾   • S r SSKJr  SSKJr  SSKJr  SSKJr  SSK	r	SSK
r
SSKJr  \(       a  SSKJrJr  S	rSS
 jrSS jrSS jr " S S\5      rSS jrSS jrg)z6
:func:`~pandas.eval` source string parsing functions
é    )Úannotations)ÚEnum)ÚStringIO)Ú	iskeywordN)ÚTYPE_CHECKING)ÚHashableÚIteratoréd   c                ó&  • U R                  5       (       a  [        U 5      (       d  U $ S U  5       nSR                  S U 5       5      n [        R                  R                  5        VVs0 s H  u  p#US[        R                  U    S3_M     nnnUR                  SSSSSS	S
SSSS.
5        SR                  U  Vs/ s H  o$R                  X"5      PM     sn5      n SU  3n U R                  5       (       d  [        SU  S35      eU $ s  snnf s  snf )aF  
Create valid Python identifiers from any string.

Check if name contains any special characters. If it contains any
special characters, the special characters will be replaced by
a special string and a prefix is added.

Raises
------
SyntaxError
    If the returned name is not a Python valid identifier, raise an exception.
c           	   3  óv   #   • U  H/  nUS R                  S UR                  SS5       5       5      4v •  M1     g7f)Ú c              3  ó8   #   • U  H  n[        U5      v •  M     g 7f)N)Úchr)Ú.0Úbs     Ú\/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pandas/core/computation/parsing.pyÚ	<genexpr>Ú;create_valid_python_identifier.<locals>.<genexpr>.<genexpr>+   s   é € ÐJÒ$I˜q”C˜—F�FÒ$Iùs   ‚ÚasciiÚbackslashreplaceN)ÚjoinÚencode)r   Úcs     r   r   Ú1create_valid_python_identifier.<locals>.<genexpr>*   s7   é € ð âˆAð 
ˆB�G‰GÑJ A§H¡H¨WÐ6HÔ$IÓJÓJÕKÚùs   ‚79r   c              3  óX   #   • U  H   u  pUR                  S X:w  a  SOS5      v •  M"     g7f)Ú\Ú	_UNICODE_Ú_BACKSLASH_N)Úreplace)r   r   Ú	c_escapeds      r   r   r   .   s/   é € ð â‰LˆAð 	×Ñ˜$¨q«~¡À=×QÐQÚùs   ‚(*Ú_Ú_QUESTIONMARK_Ú_EXCLAMATIONMARK_Ú_DOLLARSIGN_Ú
_EUROSIGN_Ú_DEGREESIGN_Ú_SINGLEQUOTE_Ú_DOUBLEQUOTE_Ú_HASH_Ú
_BACKTICK_)
Ú Ú?Ú!Ú$u   â‚¬ô   Â°Ú'Ú"Ú#Ú`ÚBACKTICK_QUOTED_STRING_zCould not convert 'z' to a valid Python identifier.)Úisidentifierr   r   ÚtokenizeÚEXACT_TOKEN_TYPESÚitemsÚtokenÚtok_nameÚupdateÚgetÚSyntaxError)ÚnameÚgenÚcharÚtokvalÚspecial_characters_replacementss        r   Úcreate_valid_python_identifierrC      s6  € ð ×Ñ×Ñ¤9¨T§?¡?Øˆñáó€Cð �7‰7ñ áóó €Dô &×7Ñ7×=Ñ=Ô?ô'â?‰LˆDð 	�”%—.‘. Ñ(Ð)¨Ð+Ò+Ù?ð $ñ 'ð $×*Ñ*àØ!Ø$ØØØ Ø Ø ØØñ	
ôð �7‰7ÑPTÓUÒPTÈ×7Ñ7¸ÖCÑPTÑUÓV€DØ$ T FÐ+€Dà×Ñ×ÑÜÐ/°¨vÐ5TÐUÓVÐVà€Kùó3'ùò& Vs   Á*$DÂ<Dc                óZ   • U u  pU[         :X  a  [        R                  [        U5      4$ X4$ )a  
Clean up a column name if surrounded by backticks.

Backtick quoted string are indicated by a certain tokval value. If a string
is a backtick quoted token it will processed by
:func:`_create_valid_python_identifier` so that the parser can find this
string when the query is executed.
In this case the tok will get the NAME tokval.

Parameters
----------
tok : tuple of int, str
    ints correspond to the all caps constants in the tokenize module

Returns
-------
tok : Tuple[int, str]
    Either the input or token or the replacement values
)ÚBACKTICK_QUOTED_STRINGr6   ÚNAMErC   )ÚtokÚtoknumrA   s      r   Úclean_backtick_quoted_toksrI   R   s1   € ð( �N€FØÔ'Ó'Ü�}‰}Ô<¸VÓDÐDÐDØˆ>Ðó    c                óÊ   •  [        U [        5      (       a  U R                  SS5      OU n [        SU  S35      n[	        U5      S   n[        U5      $ ! [         a    U s $ f = f)aµ  
Function to emulate the cleaning of a backtick quoted name.

The purpose for this function is to see what happens to the name of
identifier if it goes to the process of being parsed a Python code
inside a backtick quoted string and than being cleaned
(removed of any special characters).

Parameters
----------
name : hashable
    Name to be cleaned.

Returns
-------
name : hashable
    Returns the name after tokenizing and cleaning.
r3   z``é   )Ú
isinstanceÚstrr   Útokenize_stringÚnextrC   r=   )r>   Ú	tokenizedrA   s      r   Úclean_column_namerR   l   sd   € ð&ä*4°T¼3×*?Ñ*?ˆt�|‰|˜C Ô&ÀTˆä# a¨ v¨Q KÓ0ˆ	Ü�i“ Ñ#ˆÜ-¨fÓ5Ð5øÜó ØŠðús   ‚AA ÁA"Á!A"c                  ó$   • \ rS rSrSrSrSrSrSrg)Ú
ParseStateéŠ   r   rL   é   é   © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚDEFAULTÚIN_BACKTICKÚIN_SINGLE_QUOTEÚIN_DOUBLE_QUOTEÚ__static_attributes__rX   rJ   r   rT   rT   Š   s   † Ø€GØ€KØ€OØƒOrJ   rT   c                ó€  • / n/ nSn[         R                  nU[        U 5      :  Gaî  X   nU=S:X  Ga    U[         R                  :X  aC  U(       a"  UR                  SSR	                  U5      45        U/nUS-  n[         R
                  nMt  U[         R
                  :X  GaM  U[        U 5      S-
  :w  a  XS-      OSnUS:X  a)  UR                  U5        UR                  U5        US-  nMÓ  UR                  U5        UR                  SSR	                  U5      45        / nUS-  n[         R                  nGM   =S	:X  aV    U[         R                  :X  a  [         R                  nOŠU[         R                  :X  av  XS-
     S
:w  ak  [         R                  nOZS:X  aU  U[         R                  :X  a  [         R                  nO0U[         R                  :X  a  XS-
     S
:w  a  [         R                  n UR                  U5        US-  nU[        U 5      :  a  GMî  U(       a"  UR                  SSR	                  U5      45        U$ )a‚  
Splits a str into substrings along backtick characters (`).

Disregards backticks inside quotes.

Parameters
----------
s : str
    The Python source code string.

Returns
-------
substrings: list[tuple[bool, str]]
    List of tuples, where each tuple has two elements:
    The first is a boolean indicating if the substring is backtick-quoted.
    The second is the actual substring.
r   r3   Fr   rL   NrV   Tr0   r   r1   )rT   r]   ÚlenÚappendr   r^   r_   r`   )ÚsÚ
substringsÚsubstrÚiÚparse_stater@   Ú	next_chars          r   Ú_split_by_backtickrk   ‘   sê  € ð$ €JØ€FØ	€AÜ×$Ñ$€KØ
Œc�!‹fŒ*Ø‰tˆàßà¤*×"4Ñ"4Ó4ÞØ"×)Ñ)¨5°"·'±'¸&³/Ð*BÔCà"˜V�FØ˜‘F�AÜ",×"8Ñ"8�KÙà ¤J×$:Ñ$:Ô:à-.´#°a³&¸1±*«_  a¡%¢À4�IØ  CÓ'ØŸ™ dÔ+ØŸ™ iÔ0Ø˜Q™˜Ù ð Ÿ™ dÔ+Ø"×)Ñ)¨4°·±¸³Ð*AÔBà!#˜Ø˜Q™˜Ü&0×&8Ñ&8˜Ú Þà¤*×"4Ñ"4Ó4Ü",×"<Ñ"<‘Kà!¤Z×%?Ñ%?Ó?ÀaÈAÉÁhÐRVÓFVÜ",×"4Ñ"4‘KÜà¤*×"4Ñ"4Ó4Ü",×"<Ñ"<‘Kà!¤Z×%?Ñ%?Ó?ÀaÈAÉÁhÐRVÓFVÜ",×"4Ñ"4‘KØ�‰�dÔØ	ˆQ‰ˆða Œc�!‹fŽ*öd Ø×Ñ˜5 "§'¡'¨&£/Ð2Ô3àÐrJ   c              #  óÊ   #   • SR                  S [        U 5       5       5      n [        U 5      R                  n[        R
                  " U5      nU H  u  p4    nX44v •  M     g7f)zü
Tokenize a Python source code string.

Parameters
----------
source : str
    The Python source code string.

Returns
-------
tok_generator : Iterator[Tuple[int, str]]
    An iterator yielding all tokens with only toknum and tokval (Tuple[ing, str]).
r   c              3  óT   #   • U  H  u  pU(       a  [        US S 5      OUv •  M      g7f)rL   éÿÿÿÿN)rC   )r   Úis_backtick_quotedÚ	substrings      r   r   Ú"tokenize_string.<locals>.<genexpr>ï   s9   é € ð ò .HÑ)Ðö "ô +¨9°Q°r¨?Ô;àôò .Hùs   ‚&(N)r   rk   r   Úreadliner6   Úgenerate_tokens)ÚsourceÚline_readerÚtoken_generatorrH   rA   r!   s         r   rO   rO   ß   sg   é € ð  �W‰Wñ ô .@ÀÔ-Góó €Fô ˜6Ó"×+Ñ+€KÜ×.Ò.¨{Ó;€Oã#2Ñˆ˜˜1˜aØˆnÔò $3ùs   ‚A!A#)r>   rN   ÚreturnrN   )rG   útuple[int, str]rw   rx   )r>   r   rw   r   )re   rN   rw   zlist[tuple[bool, str]])rt   rN   rw   zIterator[tuple[int, str]])Ú__doc__Ú
__future__r   Úenumr   Úior   Úkeywordr   r9   r6   Útypingr   Úcollections.abcr   r	   rE   rC   rI   rR   rT   rk   rO   rX   rJ   r   Ú<module>r€      sY   ðñõ #å Ý Ý Û Û Ý  æ÷ð Ð ô7ôtô4ô<�ô ôKõ\rJ   