L i vddlZddlZddlmZmZmZej dejZGddZ y)N)DictListTuple^c(eZdZdZdZdZdZdZy) 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. ctj|Dcgc]}|jdc}|_||_t ||_i|_ycc}w)Nr)_line_start_refinditerstart _line_offsets_textlen _text_len_utf8_offset_cache)selftextms \/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/asttokens/line_numbers.py__init__zLineNumbers.__init__sJ/=.E.Ed.KL!''!*LDDJYDN DMsAc |jj|}||t|jkr|j|n |j}|j |j|dz |}t |Dcgc]\}}|jdD]}|}}}}|jt|||j|<|tdtt|dz |Scc}}}w)z` Given a 1-based line number and 0-based utf8 column, returns a 0-based unicode column. utf8r) rgetrr rr enumerateencodeappendmaxmin) rline utf8_columnoffsets end_offset line_texticbytes r from_utf8_colzLineNumbers.from_utf8_col%s %%))$/G/3c$:L:L6M/M4%%d+SWSaSaj**T//q9JGi' 2PPsqqxx?OPtPPgP nnS^$&-dd# 3q#c'l1nk:; << Qs?"C3c|dz}|t|jk\r |jS|dkryt|j|t d|z|jS)z` Converts 1-based line number and 0-based column to 0-based character offset into text. rr)rr rrr)rr columns rline_to_offsetzLineNumbers.line_to_offset5s[  AID s4%%&& ^^   ##D)C6N:DNN KKctdt|j|}tj|j |dz }|dz||j |z fS)zo Converts 0-based character offset to pair (line, col) of 1-based line and 0-based column numbers. rr)rrrbisect bisect_rightr )roffset line_indexs roffset_to_linezLineNumbers.offset_to_lineBsW C/ 0F$$T%7%7@1DJ NFT%7%7 %CC DDr,N)__name__ __module__ __qualname____doc__rr(r+r2r,rrrs!= LEr,r) r.retypingrrrcompileMr rr7r,rr<s5 $$D"$$'5E5Er,