B
    < [               
   @   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}yx|D ]\}}\}}\}}} |tjkrJP t| ||}|tjksdt	|tj
kr||dks(t	q(|tjkrtd||tjkrtd||||fV  q(W tdW n8 tjk
r } z|jd dst	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#   +lib/python3.7/site-packages/patsy/tokens.pyr      s*    




	c              C   sV  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m	} |t
t td ddlm	} |t
t td d S )Nza + (foo * -1)ar      +      (      Zfoo   *	   
   -      1   )   za + (bb   )assert_raisesza b # cza b "c)listr   r   NAMEr   OPNUMBERr   Z
nose.toolsr:   r   )r   tokensZexpectedcode2Ztokens2Z	expected2r:   r#   r#   r$   test_python_tokenize<   s,    rA   z
+-*/%&^|<>z==z<>z!=z<=z>=z<<z>>z**z//!~,:c             C   s  g }d}d}d}d}g }xn| D ]d\}}|t jt jt jfksBt|t jkrNq |t jkrZq |t jt jt j	fkr|sv|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}
|s8|	rB|
d |
| |
}d}|t jt jt j	fkst|dkrzd}nd}|dk}q W d|S )NFr	   T)r*   [{)r6   ]}rE   rF   )r.   z**=)r'   r1   r6   )r*   rD   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   _   s^    







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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&    rZ   )r   Z	six.movesr   r   Zpatsyr   Zpatsy.originr   __all__r   rA   r;   Z_python_space_bothrQ   rR   r   r   rZ   r#   r#   r#   r$   <module>   s"   $


;