U
    QCc                  
   @   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itpytypestring_startendorigine r$   k/mounts/lovelace/software/anaconda3/envs/qiime2-amplicon-2023.9/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      +      (      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	expected2r@   r$   r$   r%   test_python_tokenize<   s0    rE   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+   [{)r8   ]}rJ   rK   )r0   rF   =)r(   r3   r8   )r+   rI   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   _   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   rB   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   	six.movesr   r   patsyr   patsy.originr   __all__r   rE   r<   Z_python_space_bothrV   rW   r   r   r`   r$   r$   r$   r%   <module>   s2   $
   ;