o
    #e                      @   s   d dl Z d dlmZ d dlmZ d dlmZ g dZdd Z	dd	 Z
ed
g d 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}zJ|D ]C\}}\}}\}}} |tjkr( W d S |tjtjfv r7|dks6J qt	| ||}|tj
krGtd||tjkrQtd||||fV  qtd tjy } z(d|jd v r|td	|jd t	| dt| d
|jd v sJ W Y d }~d S d }~ww )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NEWLINEr   
ERRORTOKENr   COMMENT
ValueError
TokenErrorargsformatlen)	codeitZpytypestring_startendorigine r#   ,lib/python3.10/site-packages/patsy/tokens.pyr      s:   



r   c                  C   sP  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sXJ 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sJ 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NUMBERpytestZraisesr   )r   tokensZexpectedcode2Ztokens2Z	expected2r>   r#   r#   r$   test_python_tokenizeA   s0   rA   z
+-*/%&^|<>)	z==z<>z!=z<=z>=z<<z>>**z//!~,:c                 C   s|  g }d}d}d}d}g }| D ]\}}|t jt jt jfvsJ |t jkr$q|t jkr*q|t jt jt jfv rG|s8|r=|	d |	| d}d}nZ|dv rQ|	| n
|r[|dv r[|
  |tv }	|tv }
|dkrq|rq|d dkrqd}
|d	v r{|r{d}	d}
|d
kr|sd}	d}
|dv r|sd}	d}
|s|	r|	d |	| |
}d}|t jt jt jfv s|dkrd}nd}|dv }qd|S )NFr	   T)r*   [{)r6   ]}rF   rG   )r.   rB   =)r'   r1   r6   )r*   rE   r
   )r   INDENTDEDENTr   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   d   s`   









r   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   r   c                   C   s4  t ddksJ t ddksJ t ddksJ t ddks J t ddks(J t ddks0J t d	d	ks8J t d
dks@J t ddksHJ t ddksPJ t ddksXJ t ddks`J t ddkshJ t ddkspJ t ddksxJ t ddksJ t ddksJ t ddksJ t d d ksJ 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$   2test_pretty_untokenize_and_normalize_token_spacing   s&   r[   )r   Z	six.movesr   r   Zpatsyr   Zpatsy.originr   __all__r   rA   r:   Z_python_space_bothrR   rS   r   r   r[   r#   r#   r#   r$   <module>   s&   );