U
    #e                   
   @   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jtjfkrh|dks&t	q&t
| ||}|tjkrtd||tjkrtd||||fV  q&tdW np tjk
r$ } zNd|jd krtd	|jd t
| dt| d
|jd k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?!?zunterminated string literalr   zerror tokenizing input ({})zEOF in multi-line)replacestriptokenizegenerate_tokensStringIOreadline	ENDMARKERNLNEWLINEAssertionErrorr   
ERRORTOKENr   COMMENT
ValueError
TokenErrorargsformatlen)	codeitpytypestring_startendorigine r%   ]/mounts/lovelace/software/anaconda3/envs/rescript/lib/python3.8/site-packages/patsy/tokens.pyr      s4    



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st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      +      (      foo   *	   
   -      1   )   za + (bb   za b # cza b "c)listr   r   NAMEr   OPNUMBERr   pytestraisesr   )r   tokensexpectedcode2Ztokens2Z	expected2rA   r%   r%   r&   test_python_tokenizeA   s0    rF   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rd}
|d	kr|rd}	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,   [{)r9   ]}rK   rL   )r1   rG   =)r)   r4   r9   )r,   rJ   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_likebrackets
token_typetokenZthis_wants_space_beforeZthis_wants_space_afterr%   r%   r&   r   d   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   rC   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stt ddkstt ddkstt ddkstt ddkstt ddkstt ddkstt ddkst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&    ra   )r   	six.movesr   r   patsyr   patsy.originr   __all__r   rF   r=   Z_python_space_bothrW   rX   r   r   ra   r%   r%   r%   r&   <module>   s2   )
   ;