
    g+%                        g d Z ddlmZ ddlmZ ddlmZmZmZm	Z	  G d d      Z
 G d d      Z G d	 d
e      Z G d de      Z G d de      Z eej                   dd      Z G d de      Zd Zd Zd ZddZd Zy))Token	ParseNodeOperatorparse    )
PatsyError)Origin)repr_pretty_delegaterepr_pretty_implno_picklingassert_no_picklingc                       e Zd Zd Zd ZeZy)_UniqueValuec                     || _         y N)	_print_as)selfprint_ass     O/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/patsy/infix_parser.py__init__z_UniqueValue.__init__,   s	    !    c                 N    | j                   j                  d| j                  dS )N())	__class____name__r   r   s    r   __repr__z_UniqueValue.__repr__/   s    >>22DNNCCr   Nr   
__module____qualname__r   r   r   __getstate__ r   r   r   r   +   s    "D Lr   r   c                   F    e Zd ZdZ ed      Z ed      ZddZeZ	d Z
eZy)r   zA token with possible payload.

    .. attribute:: type

       An arbitrary object indicating the type of this token. Should be
      :term:`hashable`, but otherwise it can be whatever you like.
    LPARENRPARENNc                 .    || _         || _        || _        y r   )typeoriginextra)r   r'   r(   r)   s       r   r   zToken.__init__A   s    	
r   c                     |rJ g }| j                   d| j                   fg}t        || | j                  | j                  g|      S )Nr)   )r)   r
   r'   r(   )r   pcyclekwargss       r   _repr_pretty_zToken._repr_pretty_H   sH    y::!

+,F4$))T[[)A6JJr   r   )r   r   r    __doc__r   r$   r%   r   r	   r   r.   r   r!   r"   r   r   r   r   5   s6     (#F(#F
 $HK Lr   r   c                        e Zd Zd ZeZd ZeZy)r   c                 <    || _         || _        || _        || _        y r   )r'   tokenargsr(   )r   r'   r2   r3   r(   s        r   r   zParseNode.__init__S   s    	
	r   c                 ^    t        || | j                  | j                  | j                  g      S r   )r
   r'   r2   r3   )r   r+   r,   s      r   r.   zParseNode._repr_pretty_[   s$    4$))TZZ)KLLr   N)	r   r   r    r   r	   r   r.   r   r!   r"   r   r   r   r   R   s     $HM Lr   r   c                       e Zd Zd Zd ZeZy)r   c                 .    || _         || _        || _        y r   )
token_typearity
precedence)r   r7   r8   r9   s       r   r   zOperator.__init__b   s    $
$r   c                     | j                   j                  d| j                  d| j                  d| j                  dS )Nr   z, r   )r   r   r7   r8   r9   r   s    r   r   zOperator.__repr__g   s.    NN##OOJJOO	
 	
r   Nr   r"   r   r   r   r   a   s    %

 Lr   r   c                       e Zd Zd ZeZy)_StackOperatorc                      || _         || _        y r   )opr2   )r   r>   r2   s      r   r   z_StackOperator.__init__s   s    
r   Nr   r   r    r   r   r!   r"   r   r   r<   r<   r   s     Lr   r<   iigc                       e Zd Zd ZeZy)_ParseContextc                 X    g | _         g | _        || _        || _        || _        || _        y r   )op_stack
noun_stack	unary_ops
binary_opsatomic_typestrace)r   rF   rG   rH   rI   s        r   r   z_ParseContext.__init__~   s-    "$(
r   Nr?   r"   r   r   rB   rB   }   s     Lr   rB   c                    | j                   t        j                  k(  rA|j                  rt	        d       |j
                  j                  t        t        |              y| j                   |j                  v ra|j                  rt	        d| j                          |j
                  j                  t        |j                  | j                      |              y| j                   |j                  v rn|j                  r&t	        d| j                   d| j                  d       |j                  j                  t        | j                   | g | j                               yt        d| j                  j!                         d	|       )
NzPushing open-parenTzPushing unary op zPushing noun  (r   Fzexpected a noun, not '')r'   r   r$   rI   printrD   appendr<   _open_parenrF   rH   r)   rE   r   r(   r   relevant_code)r2   cs     r   _read_noun_contextrR      s   zzU\\!77&'	

.e<=	q{{	"775::78	

.UZZ)@%HI	q~~	%77EJJDE	Iejj%U\\JK+0<<+E+E+GI5
 	
r   c           	      F   | j                   sJ | j                   j                         }g }t        |j                  j                        D ]+  }|j                  | j                  j                                - |j                          | j                  r&t        d|j                  j                  d|d       t        |j                  j                  |j                  |t        j                  |j                  g|z               }| j                  j                  |       y )Nz	Reducing rK   r   )rD   popranger>   r8   rN   rE   reverserI   rM   r7   r   r2   r   combine)rQ   stackopr3   inodes        r   _run_opr[      s    :::jjnnGD7::##$ (ALL$$&'(LLNwwGJJ$9$94@A

-.	D LLr   c                    | j                   t        j                  k(  rf|j                  rt	        d       |j
                  r|j
                  d   j                  j                  t        j                  k7  rLt        |       |j
                  r5|j
                  d   j                  j                  t        j                  k7  rL|j
                  st        d|       |j
                  d   j                  j                  t        j                  k(  sJ t        j                  |j
                  d   j                  |j                  d   j                  | g      }||j                  d   _        |j
                  j!                          y| j                   |j"                  v r|j                  rt	        d| j                   z         t%        |j"                  | j                      |       }|j
                  r|j                  j&                  |j
                  d   j                  j&                  k  rRt        |       |j
                  r;|j                  j&                  |j
                  d   j                  j&                  k  rR|j                  rt	        d| j                   z         |j
                  j)                  |       yt        d| j                  j+                         d	|       )
NzFound close-parenr@   zmissing '(' or extra ')'FzFound binary operator %rzPushing binary operator %rTzexpected an operator, not 'rL   )r'   r   r%   rI   rM   rD   r>   r7   r$   r[   r   r   rW   r2   rE   r(   rT   rG   r<   r9   rN   rP   )r2   rQ   combinedrX   s       r   _read_op_contextr^      s   zzU\\!77%&jjQZZ^..99U\\IAJ jjQZZ^..99U\\Izz7??zz"~  ++u||;;; >>1::b>#7#7b9I9O9OQV"WX"*R	

	q||	#77,

;< ejj!95AjjWZZ22ajjn6G6G6R6RRAJ jjWZZ22ajjn6G6G6R6RR77.%**=>	

'"050J0J0LNPU
 	
r   c                    t        |       }i }i }|D ]i  }|j                  t        j                  kD  sJ |j                  dk(  r|||j                  <   A|j                  dk(  r|||j                  <   `t        d       t        ||||      }d}	|D ]8  }
|j                  rt        d|	d       |	rt        |
|      }	-t        |
|      }	: |j                  rt        d       |	r-t        d|j                  d	   j                  j                        |j                  ro|j                  d	   j                  j                  t         j"                  k(  r#t        d
|j                  d	   j                        t%        |       |j                  rot'        |j(                        dk(  sJ |j(                  j+                         S )N      z!operators must be unary or binaryTzReading next token (want_noun=r   zEnd of token streamz1expected a noun, but instead the expression endedr@   zUnmatched '(')iterr9   rO   r8   r7   
ValueErrorrB   rI   rM   rR   r^   r   rD   r2   r(   r>   r   r$   r[   lenrE   rT   )tokens	operatorsrH   rI   token_sourcerF   rG   r>   rQ   	want_nounr2   s              r   infix_parseri      s   <LIJ B}}{5555588q=')Ibmm$XX](*Jr}}%@AAB 	i\5AA I 377DE*5!4I(2I3 	ww#$?JJrN  ''
 	

 **::b>''5<<7_ajjn.B.BCC
 **
 q||!!!<<r   c                     t        ddd      t        ddd      t        ddd      g} d	d
g}t        ddd      }t        d	|d      t        d|d      t        d|d      t        d
|d      t        d|d      t        t        j                  |d      t        d	|d      t        d|d      t        d
|d      t        t        j                  |d      g
}t        || |      }d } ||dd        ||j                  d   d	d       |j                  d   j                  g k(  sJ  ||j                  d   dd        ||j                  d   j                  d   dd       t        |j                  d   j                  d   j                        dk(  sJ  ||j                  d   j                  d   j                  d   d
d        ||j                  d   j                  d   dd        ||j                  d   j                  d   j                  d   d	d        ||j                  d   j                  d   j                  d   d
d       dd l}|j                  t        t
        g t        ddd      gdg       t        || |d       y )N+ra   
   *   -r`      ATOM1ATOM2asdf   abr   rQ   dr   c                 \    | j                   |k(  sJ | j                  j                  |k(  sJ y r   )r'   r2   r)   )treer'   r)   s      r   teztest_infix_parse.<locals>.te  s,    yyD   zz5(((r   r   ATOMICT)rI   )r   r   r   r$   r%   ri   r3   rd   pytestraisesrc   )opsatomicmock_originre   ry   rz   r|   s          r   test_infix_parser      sN   CB#q"!5xQ7K
LCwFA&Kg{C(c;$c;$g{C(c;$ellK-g{C(c;$g{C(ellK-F vsF+D) tS#tyy|Wc"99Q<"""tyy|S#tyy|S#&tyy|  #(()Q...tyy|  #Wc2tyy|S#&tyy|  #Wc2tyy|  #Wc2 MM*k2a0D/EzR V40r   N)F)__all__patsyr   patsy.originr   
patsy.utilr	   r
   r   r   r   r   objectr   r   r<   r$   rO   rB   rR   r[   r^   ri   r   r"   r   r   <module>r      s   > 6     : v "V  u||R2	F 	
,$
@+^(1r   