U
    md                  
   @   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 qt| ||}|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&tdW n> tjk
r } z|jd dst	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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      +      (      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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*   [{)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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&    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   $
   ;