ó
    ðti  ã                   óv   • S SK r S SKrS SKJrJrJr  \R                  " S\R                  5      r " S S5      r	g)é    N)ÚDictÚListÚTupleÚ^c                   ó0   • \ rS rSrSrS rS rS rS rSr	g)	ÚLineNumbersé   a@  
Class to convert between character offsets in a text string, and pairs (line, column) of 1-based
line and 0-based column numbers, as used by tokens and AST nodes.

This class expects unicode for input and stores positions in unicode. But it supports
translating to and from utf8 offsets, which are used by ast parsing.
c                 óº   • [         R                  U5       Vs/ s H  o"R                  S5      PM     snU l        Xl        [        U5      U l        0 U l        g s  snf )Nr   )Ú_line_start_reÚfinditerÚstartÚ_line_offsetsÚ_textÚlenÚ	_text_lenÚ_utf8_offset_cache)ÚselfÚtextÚms      ÚS/home/mande/repo/quber/.venv/lib/python3.13/site-packages/asttokens/line_numbers.pyÚ__init__ÚLineNumbers.__init__   sL   € ô /=×.EÑ.EÀdÔ.KÓLÒ.K¨Ÿ'™' !ž*Ñ.KÑL€DÔØ„JÜ˜“Y€D„NØ €DÕùò Ms   ˜Ac           	      óþ  • U R                   R                  U5      nUc´  U[        U R                  5      :  a  U R                  U   OU R                  nU R
                  U R                  US-
     U n[        U5       VVVs/ s H  u  pgUR                  S5        H  o†PM     M!     nnnnUR                  [        U5      5        X0R                   U'   U[        S[        [        U5      S-
  U5      5         $ s  snnnf )zX
Given a 1-based line number and 0-based utf8 column, returns a 0-based unicode column.
é   Úutf8r   )r   Úgetr   r   r   r   Ú	enumerateÚencodeÚappendÚmaxÚmin)	r   ÚlineÚutf8_columnÚoffsetsÚ
end_offsetÚ	line_textÚiÚcÚbytes	            r   Úfrom_utf8_colÚLineNumbers.from_utf8_col%   sÝ   € ð
 ×%Ñ%×)Ñ)¨$Ó/€GØ�Ø/3´c¸$×:LÑ:LÓ6MÓ/M�4×%Ñ% dÒ+ÐSW×SaÑSa€jØ—*‘*˜T×/Ñ/°°q±Ñ9¸JÐG€iä'¨	Ô2ÕPÒ2‘s�q¸q¿x¹xÈ×?O°t’Ñ?O‘Ñ2€gÒPØ‡n�n”S˜“^Ô$Ø&-×Ñ˜dÑ#à”3�qœ#œc '›l¨1™n¨kÓ:Ó;Ñ<Ð<ùô	 Qs   Â&C8c                 óÄ   • US-  nU[        U R                  5      :¼  a  U R                  $ US:  a  g[        U R                  U   [	        SU5      -   U R                  5      $ )zX
Converts 1-based line number and 0-based column to 0-based character offset into text.
r   r   )r   r   r   r!   r    )r   r"   Úcolumns      r   Úline_to_offsetÚLineNumbers.line_to_offset5   s[   € ð
 	ˆA�I€DØŒs�4×%Ñ%Ó&Ó&Ø�^‰^ÐØ	�‹Øä�×#Ñ# DÑ)¬C°°6«NÑ:¸D¿N¹NÓKÐKó    c                 ó¶   • [        S[        U R                  U5      5      n[        R                  " U R
                  U5      S-
  nUS-   XR
                  U   -
  4$ )zc
Converts 0-based character offset to pair (line, col) of 1-based line and 0-based column
numbers.
r   r   )r    r!   r   ÚbisectÚbisect_rightr   )r   ÚoffsetÚ
line_indexs      r   Úoffset_to_lineÚLineNumbers.offset_to_lineB   sU   € ô �”C˜Ÿ™¨Ó/Ó0€FÜ×$Ò$ T×%7Ñ%7¸Ó@À1ÑD€JØ˜‰N˜F×%7Ñ%7¸
Ñ%CÑCÐDÐDr0   )r   r   r   r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r*   r.   r6   Ú__static_attributes__© r0   r   r   r      s   † ñò!ò=ò LõEr0   r   )
r2   ÚreÚtypingr   r   r   ÚcompileÚMr   r   r>   r0   r   Ú<module>rC      s3   ðó Û 	ß $Ñ $à—’˜D "§$¡$Ó'€÷5Eò 5Er0   