o
    DDi                      @   s  U d Z ddlmZmZ ddlmZ ddlmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZmZ ddlmZmZ dd	lmZmZ dd
lmZ ddlmZ ejZee d< ej!Z"ee d< ej#Z$ee d< ej%Z&ee d< ej'Z(ee d< ej)Z*ee d< ej+Z,ee d< ej-Z.ee d< G dd deZ/e/j0Z1e/e d< e/j2Z3e/e d< eeddG dd dZ4de5dedee fdd Z6de5d!ee5 dedee fd"d#Zde5d!ee5 dedeed$d$f fd%d&Z7d'e4d(ed)e
e defd*d+Z8d$S ),a  
Parso's tokenize doesn't give us tokens in the format that we'd ideally like, so this
performs a small number of transformations to the token stream:

- `end_pos` is precomputed as a property, instead of lazily as a method, for more
  efficient access.
- `whitespace_before` and `whitespace_after` have been added. These include the correct
  indentation information.
- `prefix` is removed, since we don't use it anywhere.
- `ERRORTOKEN` and `ERROR_DEDENT` have been removed, because we don't intend to support
  error recovery. If we encounter token errors, we'll raise a ParserSyntaxError instead.

If performance becomes a concern, we can rewrite this later as a fork of the original
tokenize module, instead of as a wrapper.
    )	dataclassfield)Enum)	GeneratorIteratorListOptionalSequence)	add_slots)ParserSyntaxError)PythonTokenTypes	TokenType)Tokentokenize_lines)PythonVersionInfosplit_lines)r   WhitespaceState_ERRORTOKEN_ERROR_DEDENT_INDENT_DEDENT
_ENDMARKER_FSTRING_START_FSTRING_END_OPc                   @   s   e Zd ZdZdZdS )_ParenthesisOrFStringStackEntryr   N)__name__
__module____qualname__PARENTHESISFSTRING r"   r"   X/var/www/Datamplify/venv/lib/python3.10/site-packages/libcst/_parser/wrapped_tokenize.pyr   3   s    r   _PARENTHESIS_STACK_ENTRY_FSTRING_STACK_ENTRYF)frozenc                   @   s`   e Zd ZU ee ed< edd dZeed< edd dZ	e
e ed< eedZe
e ed< d	S )
_TokenizeStatelinesc                   C   s   t dddddS )N   r    F)linecolumnabsolute_indentis_parenthesizedr   r"   r"   r"   r#   <lambda>E   s    z_TokenizeState.<lambda>)default_factoryprevious_whitespace_statec                   C   s   dgS )Nr*   r"   r"   r"   r"   r#   r/   I   s    indentsparenthesis_or_fstring_stackN)r   r   r   r	   str__annotations__r   r1   r   r2   r   listr3   r   r"   r"   r"   r#   r'   @   s   
 r'   codeversion_inforeturnc                 C   sD   zddl m} || W S  ty!   t| dd}t| || Y S w )Nr   tokenizeT)keepends)libcst_nativer;   ImportErrorr   r   )r7   r8   native_tokenizer(   r"   r"   r#   r;   O   s   r;   r(   c                 C   s8   zddl m} || W S  ty   t| || Y S w )Nr   r:   )r=   r;   r>   tokenize_lines_py)r7   r(   r8   r?   r"   r"   r#   r   Y   s   r   Nc                 c   sh    t |}tt||}zt|}W n
 ty   Y d S w |D ]}t|||V  |}qt||d V  d S )N)r'   iterorig_tokenize_linesnextStopIteration_convert_token)r7   r(   r8   stateorig_tokens_iter
curr_token
next_tokenr"   r"   r#   r@   e   s   r@   rF   rH   rI   c              	   C   s<  |j }|j}|j}|tu rt|d| j|d |d d|tu r.td| j|d |d dd }|tu rOt| j	dk r=dn| j	d }| j	d	 }|t|d  }|d urx|j }	|	tu ro|j\}
}| j	
| j|
d  d |  n	|	tu rx| j	  | j}|tu s|tu s|tu r|}|}nt|}t|dkr|d t| d t|d	 f}n|d |d t| f}| j}z+|tu r|
t n|tu r|  n|tu r|d
v r|
t n|dv r|  W n ty   td| j|d |d dw t|dko|d	 tk}t|d |d | j	d	 |}|| _t|||||||S )Nz is not a valid token.r   r)   )r(   raw_line
raw_columnz,Inconsistent indentation. Expected a dedent.   r*   z([{z)]}z=Encountered a closing brace without a matching opening brace.)typestring	start_posr   r   r(   r   r   lenr2   appendr   popr1   r   r   r3   r   r%   r   r   r$   
IndexErrorr   r   )rF   rH   rI   ct_type	ct_stringct_start_posrelative_indent
old_indent
new_indentnt_typent_line	nt_columnwhitespace_beforewhitespace_after
ct_end_posr(   	pof_stackr.   r"   r"   r#   rE   x   s   

 
"	

rE   )9__doc__dataclassesr   r   enumr   typingr   r   r   r   r	   libcst._add_slotsr
   libcst._exceptionsr   !libcst._parser.parso.python.tokenr   r   $libcst._parser.parso.python.tokenizer   	OrigTokenr   rB   libcst._parser.parso.utilsr   r   libcst._parser.types.token%libcst._parser.types.whitespace_stater   
ERRORTOKENr   r5   ERROR_DEDENTr   INDENTr   DEDENTr   	ENDMARKERr   FSTRING_STARTr   FSTRING_ENDr   OPr   r   r    r$   r!   r%   r'   r4   r;   r@   rE   r"   r"   r"   r#   <module>   sn   




