U
    ½mœdã  ã                
   @   s˜   d dl Z d dlmZ d dlmZ d dlmZ dddgZdd„ Z	d	d
„ Z
edƒdddddddddg	 Zeddg Zeddg Zdd„ Zdd„ Zdd„ ZdS )é    N)Ú	cStringIO)Ú
PatsyError)ÚOriginÚpython_tokenizeÚpretty_untokenizeÚnormalize_token_spacingc           	   
   c   s   |   dd¡ ¡ } t t| ƒj¡}zœ|D ]Š\}}\}}\}}} |tjkrJ qºt| ||ƒ}|tjksdt	‚|tj
kr||dks&t	‚q&|tjkr�td|ƒ‚|tjkr¤td|ƒ‚|||fV  q&tdƒ‚W n> tjk
rú } z|jd  d¡sät	‚W Y ¢d S d }~X Y nX d S )	NÚ
ú Ú z2error tokenizing input (maybe an unclosed string?)zcomments are not allowedz!stream ended without ENDMARKER?!?r   zEOF in multi-line)ÚreplaceÚstripÚtokenizeÚgenerate_tokensÚStringIOÚreadlineÚ	ENDMARKERr   ÚNLÚAssertionErrorÚNEWLINEÚ
ERRORTOKENr   ÚCOMMENTÚ
ValueErrorÚ
TokenErrorÚargsÚ
startswith)	ÚcodeÚitZpytypeÚstringÚ_ÚstartÚendÚoriginÚe© r#   úE/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/patsy/tokens.pyr      s,    


þ

	c                  C   sR  d} t t| ƒƒ}tjdt| ddƒftjdt| ddƒftjdt| d	d
ƒftjdt| d
dƒftjdt| ddƒftjdt| ddƒftjdt| ddƒftjdt| ddƒfg}||ks°t‚d}t t|ƒƒ}tjdt|ddƒftjdt|ddƒftjdt|d	d
ƒftjdt|d
dƒfg}||k�st‚dd l}| 	t
t tdƒ¡ dd l}| 	t
t tdƒ¡ d S )Nza + (foo * -1)Úar   é   ú+é   é   ú(é   é   Zfooé   Ú*é	   é
   ú-é   é   Ú1é   ú)é   za + (bÚbé   za b # cza b "c)Úlistr   r   ÚNAMEr   ÚOPÚNUMBERr   ÚpytestZraisesr   )r   ÚtokensÚexpectedÚcode2Ztokens2Z	expected2r>   r#   r#   r$   Útest_python_tokenize<   s0    ùýrB   z
+-*/%&^|<>z==z<>z!=z<=z>=z<<z>>ú**z//ú!ú~ú,ú:c                 C   sŽ  g }d}d}d}d}g }| D �]d\}}|t jt jt jfks>t‚|t jkrJq|t jkrVq|t jt jt j	fkr�|sr|r|| 
d¡ | 
|¡ d}d}nÀ|dkr¤| 
|¡ n|r¸|dkr¸| ¡  |tk}	|tk}
|dkrä|rä|d dkräd}
|d	krø|rød}	d}
|d
k�r|�sd}	d}
|dk�r(|�s(d}	d}
|�s4|	�r>| 
d¡ | 
|¡ |
}d}|t jt jt j	fk�sp|dk�rvd}nd}|dk}qd |¡S )NFr	   T)r*   ú[Ú{)r6   ú]Ú}rG   éÿÿÿÿrH   )r.   rC   ú=)r'   r1   r6   )r*   rF   r
   )r   ÚINDENTÚDEDENTr   r   r   r   r;   r=   ÚSTRINGÚappendÚpopÚ_python_space_beforeÚ_python_space_afterÚjoin)Ztyped_tokensÚtextZprev_was_space_delimZprev_wants_spaceZprev_was_open_paren_or_commaZprev_was_object_likeZbracketsÚ
token_typeÚtokenZthis_wants_space_beforeZthis_wants_space_afterr#   r#   r$   r   _   sb    
ÿ






ÿ
c                 C   s"   dd„ t  t| ƒj¡D ƒ}t|ƒS )Nc                 S   s   g | ]}|d  |d f‘qS )r   r&   r#   )Ú.0Útr#   r#   r$   Ú
<listcomp>›   s   ÿz+normalize_token_spacing.<locals>.<listcomp>)r   r   r   r   r   )r   r?   r#   r#   r$   r   š   s    ÿc                   C   s<  t dƒdkst‚t dƒdks t‚t dƒdks0t‚t dƒdks@t‚t dƒdksPt‚t dƒdks`t‚t d	ƒd	kspt‚t d
ƒdks€t‚t dƒdks�t‚t dƒdks t‚t dƒdks°t‚t dƒdksÀt‚t dƒdksÐt‚t dƒdksàt‚t dƒdksðt‚t dƒdk�st‚t dƒdk�st‚t dƒdk�s&t‚t d ƒd k�s8t‚d S )!Nz1 + 1z1+1z
1*(2+3**2)z1 * (2 + 3 ** 2)za and bzfoo(a=bar.baz[1:])z{"hi":foo[:]}z{"hi": foo[:]}z'a' "b" 'c'z"""a""" is 1 or 2==3z"""a""" is 1 or 2 == 3zfoo ( * args )z
foo(*args)zfoo ( a * args )zfoo(a * args)zfoo ( ** args )zfoo(**args)zfoo ( a ** args )zfoo(a ** args)zfoo (1, * args )zfoo(1, *args)zfoo (1, a * args )zfoo(1, a * args)zfoo (1, ** args )zfoo(1, **args)zfoo (1, a ** args )zfoo(1, a ** args)za=foo(b = 1)za = foo(b=1)zfoo(+ 10, bar = - 1)zfoo(+10, bar=-1)z1 + +10 + -1 - 5)r   r   r#   r#   r#   r$   Ú2test_pretty_untokenize_and_normalize_token_spacingŸ   s&    r\   )r   Z	six.movesr   r   Zpatsyr   Zpatsy.originr   Ú__all__r   rB   r:   Z_python_space_bothrS   rT   r   r   r\   r#   r#   r#   r$   Ú<module>   s2   ÿ$
   ÿÿÿÿ;