
    .Cc                         d dl Z d dlmZ d dlmZ d dlmZ g dZd Z	d Z
 ed          g d	z   Zed
dgz   Zeddgz   Zd Zd Zd ZdS )    N)	cStringIO)
PatsyError)Origin)python_tokenizepretty_untokenizenormalize_token_spacingc              #     K   |                      dd                                          } t          j        t	          |           j                  }	 |D ]\  }}\  }}\  }}} |t          j        k    r d S t          | ||          }|t          j        k    sJ |t          j	        k    r	|dk    sJ ]|t          j
        k    rt          d|          |t          j        k    rt          d|          |||fV  t          d          # t          j        $ r-}|j        d                             d          sJ Y d }~d S d }~ww xY w)	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NEWLINE
ERRORTOKENr   COMMENT
ValueError
TokenErrorargs
startswith)	codeitpytypestring_startendorigines	            ,lib/python3.11/site-packages/patsy/tokens.pyr   r      s      <<c""((**D		!(4.."9	:	:B<> 	B 	B8VVZa!S4++ D%--FX[(((()) |###,, )  "?!') ) ) )) E !;VDDD66*****@AAA 
 
 
 vay##$788888
s   !D 5BD E"D??Ec                  &   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    sJ 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J 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NUMBERpytestraisesr   )r   tokensexpectedcode2tokens2	expected2rA   s          r%   test_python_tokenizerH   <   s   D/$''((FVD!Q%7%78c6$1#5#56c6$1#5#56vdAq'9'9:c6$2#6#67c6$B#7#78#vdB';';<c6$B#7#78:H XE?5))**G-fUAq&9&9:+sF5!Q$7$78+sF5!Q$7$78-fUAq&9&9:<I iMMM
MM*dOI$>$>???MMM
MM*dOI$>$>?????    z
+-*/%&^|<>)	z==z<>z!=z<=z>=z<<z>>**z//!~,:c                 ^   g }d}d}d}d}g }| D ]\  }}|t           j        t           j        t           j        fvsJ |t           j        k    r>|t           j        k    rO|t           j        t           j        t           j        fv r3|s|r|	                    d           |	                    |           d}d}n|dv r|	                    |           n|r|dv r|
                                 |t          v }	|t          v }
|dk    r|r|d         dk    rd}
|d	v r|rd}	d}
|d
k    r|sd}	d}
|dv r|sd}	d}
|s|	r|	                    d           |	                    |           |
}d}|t           j        t           j        t           j        fv s|dk    rd}nd}|dv }d                    |          S )NFr   T)r,   [{)r9   ]}rN   rP   )r1   rJ   =)r)   r4   r9   )r,   rM   r   )r   INDENTDEDENTr   r   r   r>   r@   STRINGappendpop_python_space_before_python_space_afterjoin)typed_tokenstextprev_was_space_delimprev_wants_spaceprev_was_open_paren_or_commaprev_was_object_likebrackets
token_typetokenthis_wants_space_beforethis_wants_space_afters              r%   r   r   _   s`   D #(  H) 1; 1;
E(/8?"*+"/ / 	/ 	/ 	/)) 	++ 	(-(/JJ $	) !#7 !C   KK$#'  ' &&&& e6 ',0D'D#&+/B&B" | / /Xb\S-@ /).&# /(D /*/').&| .H .*.')-&
 
" /+? /*/').& !#: !C   KK5#( 8=(/8?KK 	)|	)#'  #( ',
':$$774==rI   c                     d t          j        t          |           j                  D             }t	          |          S )Nc                 .    g | ]}|d          |d         fS )r   r(    ).0ts     r%   
<listcomp>z+normalize_token_spacing.<locals>.<listcomp>   s:     J J J tQqTl J J JrI   )r   r   r   r   r   )r   rC   s     r%   r   r      sG    J J/0GHHJ J JFV$$$rI   c                  $   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    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    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    sJ t          d          dk    sJ t          d          dk    sJ t          d           d k    sJ 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   rk   rI   r%   2test_pretty_untokenize_and_normalize_token_spacingrp      s   "7++w6666"5))W4444"<004FFFFF"9--::::"#788<PPPPP"#677;OOOOO"#4559JJJJJ"#9::>VVVVV"#344DDDD"#566/IIII"#455FFFF"#677;KKKKK"#566/IIII"#788<NNNNN"#677;KKKKK"#899=PPPPP">22nDDDD"#9::>PPPPP"#566:LLLLLLLrI   )r   	six.movesr   r   patsyr   patsy.originr   __all__r   rH   r=   _python_space_bothr[   r\   r   r   rp   rk   rI   r%   <module>rv      s    + + + + + +            & & &
" " "H@ @ @6 d<((1 1 11  +*% )s$ 9 9 9v% % %
M M M M MrI   