§
    ŒŸj  ã                   óp   — d dl Z d dlZd dlmZmZmZ  ej        dej        ¦  «        Z G d„ d¦  «        Z	dS )é    N)ÚDictÚListÚTupleú^c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚLineNumbersaJ  
  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                 óœ   — d„ t                                |¦  «        D ¦   «         | _        || _        t	          |¦  «        | _        i | _        d S )Nc                 ó8   — g | ]}|                      d ¦  «        ‘ŒS )r   )Ústart)Ú.0Úms     úc/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/asttokens/line_numbers.pyú
<listcomp>z(LineNumbers.__init__.<locals>.<listcomp>    s"   € ÐLÐLÐL¨˜!Ÿ'š' !™*œ*ÐLÐLÐLó    )Ú_line_start_reÚfinditerÚ_line_offsetsÚ_textÚlenÚ	_text_lenÚ_utf8_offset_cache)ÚselfÚtexts     r   Ú__init__zLineNumbers.__init__   sK   € ð MÐL­n×.EÒ.EÀdÑ.KÔ.KÐLÑLÔL€DÔØ€D„JÝ˜‘Y”Y€D„NØ €DÔÐÐr   c           	      ó¾  — | j                              |¦  «        }|€Ž|t          | j        ¦  «        k     r| j        |         n| j        }| j        | j        |dz
           |…         }d„ t          |¦  «        D ¦   «         }|                     t          |¦  «        ¦  «         || j         |<   |t          dt          t          |¦  «        dz
  |¦  «        ¦  «                 S )z`
    Given a 1-based line number and 0-based utf8 column, returns a 0-based unicode column.
    Né   c                 óH   — g | ]\  }}|                      d ¦  «        D ]}|‘ŒŒ S )Úutf8)Úencode)r   ÚiÚcÚbytes       r   r   z-LineNumbers.from_utf8_col.<locals>.<listcomp>/   s5   € ÐPÐPÐP‘s�q˜¸q¿xºxÈÑ?OÔ?OÐPÐP°t�ÐPÐPÐPÐPr   r   )
r   Úgetr   r   r   r   Ú	enumerateÚappendÚmaxÚmin)r   ÚlineÚutf8_columnÚoffsetsÚ
end_offsetÚ	line_texts         r   Úfrom_utf8_colzLineNumbers.from_utf8_col%   sÐ   € ð
 Ô%×)Ò)¨$Ñ/Ô/€GØ€Ø/3µc¸$Ô:LÑ6MÔ6MÒ/MÐ/M�4Ô% dÔ+Ð+ÐSWÔSa€jØ”*˜TÔ/°°q±Ô9¸JÐFÔG€iàPÐP�i¨	Ñ2Ô2ÐPÑPÔP€gØ‡n‚n•S˜‘^”^Ñ$Ô$Ð$Ø&-€dÔ˜dÑ#à•3�q�#�c '™lœl¨1™n¨kÑ:Ô:Ñ;Ô;Ô<Ð<r   c                 ó¼   — |dz  }|t          | j        ¦  «        k    r| j        S |dk     rdS t          | j        |         t	          d|¦  «        z   | j        ¦  «        S )z`
    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_offsetzLineNumbers.line_to_offset5   s`   € ð
 	ˆA�I€DØ�s�4Ô%Ñ&Ô&Ò&Ð&ØŒ^ÐØ	�ŠˆØˆQå�Ô# DÔ)­C°°6©N¬NÑ:¸D¼NÑKÔKÐKr   c                 ó¬   — t          dt          | j        |¦  «        ¦  «        }t          j        | j        |¦  «        dz
  }|dz   || j        |         z
  fS )zo
    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_linezLineNumbers.offset_to_lineB   sU   € õ �•C˜œ¨Ñ/Ô/Ñ0Ô0€FÝÔ$ TÔ%7¸Ñ@Ô@À1ÑD€JØ˜‰N˜F TÔ%7¸
Ô%CÑCÐDÐDr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r-   r0   r6   © r   r   r   r      sb   € € € € € ðð ð!ð !ð !ð=ð =ð =ð Lð Lð LðEð Eð Eð Eð Er   r   )
r2   ÚreÚtypingr   r   r   ÚcompileÚMr   r   r;   r   r   ú<module>r@      sˆ   ðð €€€Ø 	€	€	€	Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $à�”˜D "¤$Ñ'Ô'€ð5Eð 5Eð 5Eð 5Eð 5Eñ 5Eô 5Eð 5Eð 5Eð 5Er   