
    J/Ph$                     4   d gZ ddlZddlmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZmZ ddlmZ g d	Zd
 Zd Zd Zd Z e
ddd          Ze e
ddd           e
ddd           e
ddd           e
ddd           e
ddd           e
ddd           e
ddd           e
ddd           e
ddd          g
Zg fdZi dddgdddgd ddgdddgd!dd!gd"g d#d$g d#d%g d#d&dd!dd'ggd(ddg d)d*ggd+dddd!g d,gd-ggd.dg d/gd0dg d/gd1dg d)g d2gd3ddd!g d4ggd5ddg d6ggd7ddg d8ggddd!g d9ggddg d)d*ggddd!g d9ggddd!g d:ggdd!gdddggd;Zd< Zd= Zd> Zd? Zg d@ZdA Z g fdBZ!dg dCgddd!g dDggdEZ"dF Z#dS )Gparse_formula    N)StringIO)
PatsyError)Origin)TokenOperatorinfix_parse	ParseNode)python_tokenizepretty_untokenize)PushbackAdapter)PYTHON_EXPRZEROONENUMBERc                 @    	  | |           dS # t           $ r Y dS w xY w)NTF)
ValueError)fvs     S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/patsy/parse_formula.py_is_ar      s?    	! t    uus    
c                    g }g }g }d}| D ]\  }}}|dk    sJ |dk    r||v r|                      |||f            nh|dv r|dz  }|dv r|dz  }|dk     rt          d|          |                    |           |                    |           |                    |           |dk    rt          t	          ||                    }	|	dk    rd}
n8|	dk    rd	}
n/t          t          |	          st          t          |	          rd
}
nd}
t          |
t          j
        |          |	          S t          dt          j
        |                    )Nr   )([{   ))]}zunmatched close bracket0r   1r   r   r   )extraz.unclosed bracket in embedded Python expression)	push_backr   appendr   zipr   intfloatr   r   combine)it
end_tokenspytypestoken_stringsoriginsbracket_levelpytypetoken_stringorigin	expr_text
token_types              r   _read_python_exprr4   %   s    GMGM(*  $f!!!!A,*"<"<LL&,7888E?**QM?**QM16???v\***v%c'=&A&ABB	JJ#JJ3	"" 	'eE9&=&= 	'!JJ&JZ!8!8	JJJJ?PWAXAX
 
 	
    c              #     K   d|vsJ d|vsJ t           j        t           j        d}|D ]}|||<   t          |          }|                    d           t          t          |                     }|D ]M\  }}}||v rt          ||         |          V  #|                    |||f           t          ||          V  Nd S )Nr   r   )r   r   )	r   LPARENRPARENsetremover   r   r#   r4   )	codeoperator_stringsmagic_token_typesoperator_stringr*   r)   r/   r0   r1   s	            r   _tokenize_formular?   L   s     &&&&&&&&&&\\  , = =-</** &''Jc	..	/	/B(* 4 4$f,,,),7@@@@@@LL&,7888#B
3333334 4r5   c                  T   d} t          t          | g d                    }dt          | dd          dfdt          | dd	          d fdt          | d
d          dfdt          | dd          d ft          j        t          | dd          d fdt          | dd          dft          j        t          | dd          d fdt          | dd          d fdt          | dd          d fdt          | dd          dfdt          | dd          d fdt          | d d!          d"fdt          | d#d$          d fd%t          | d&d'          d(fg}t          ||          D ]U\  }}t          |t                    sJ |j        |d         k    sJ |j	        |d         k    sJ |j
        |d         k    sJ Vd S ))Nz&y ~ a + (foo(b,c +   2)) + -1 + 0 + 10)+-~r   r   r   yrC               arA            	      zfoo(b, c + 2)         rB         r      r!         r       !   r    "   #   r   $   &   10)listr?   r   r   r7   r8   r%   
isinstancetyper1   r"   )r;   tokens	expectedsgotexpecteds        r   test__tokenize_formulare   c   s   3D#D///::;;F	tQ**C0	fT1a  $'	tQ**C0	fT1a  $'	vdAq))40	tQ++_=	vdB++T2	fT2r""D)	fT2r""D)	tR$$c*	fT2r""D)	b"%%s+	fT2r""D)	6$B''.I  VY// ( (X#u%%%%%x8A;&&&&zXa[((((yHQK'''''	( (r5   rC   r   irE   rA   d   rB   *   /:i,  **i  c                 T   |                                  sd} |D ]}|j        dk     rt          d          t          |z   }d |D             }t	          t          | |          |t                    }t          |t                    r|j	        dk    rt          dd |g|j
                  }|S )Nz~ 1r   z'all operators must have precedence >= 0c                     g | ]	}|j         
S  )r3   ).0ops     r   
<listcomp>z!parse_formula.<locals>.<listcomp>   s    :::":::r5   rC   )strip
precedencer   _default_opsr	   r?   _atomic_token_typesr_   r
   r`   r1   )r;   extra_operatorsrp   	operatorsr<   trees         r   r   r      s    ::<<  H H=1FGGG  .I::	:::$ 0119>Q D dI&& 9$)s*:*:dTFDK88Kr5    r!    z 
 rI   za ~ b)rC   rI   bz(a ~ b)za ~ ((((b))))za ~ ((((+b))))r{   z	a + b + c)rA   rI   r{   cza + (b ~ c) + d)rC   r{   r|   dza + np.log(a, base=10))rA   rI   znp.log(a, base=10)za + np . log(a , base = 10)za + b ~ c * d)rg   r|   r}   z	a + b * c)rg   r{   r|   z-a**2)rk   rI   2z-a:b)rj   rI   r{   )rj   r{   r|   )ri   r{   r|   )za + b:cz	(a + b):cza*b:cza+b / cz~ az-1c                    t          | t                    sJ | j        rH| j        |d         k    sJ t	          | j        |dd                    D ]\  }}t          ||           d S | j        t          v sJ | j        j        |k    sJ d S )Nr   r   )	r_   r
   argsr`   r%   _compare_treesru   tokenr"   )rc   rd   argexpected_args       r   r   r      s    c9%%%%%
x +x8A;&&&&!$SXx|!<!< 	. 	.C3----	. 	. x.....y(******r5   c                     |                                  D ]_\  }}t          ||          }t          t          |          t          |                     t          |           t	          ||           `d S Nrv   )itemsr   printreprr   )
test_casesrv   r;   rd   actuals        r   _do_parse_testr      sw    $**,, ) )ht_EEEd4jj$x..)))fvx((((	) )r5   c                  0    t          t          g            d S )N)r   _parser_testsrn   r5   r   test_parse_formular      s    ="%%%%%r5   c                  Z   t          d          } | j        t          ddd          k    sJ | j        j        t          ddd          k    sJ | j        d         j        t          ddd          k    sJ | j        d         j        t          ddd          k    sJ | j        d         j        j        t          ddd	          k    sJ | j        d         j        d         j        t          ddd
          k    sJ | j        d         j        d         j        t          ddd          k    sJ d S )Nz	a ~ b + cr   rM   rE   rF   r   rG   rJ   rK   rH   rL   )r   r1   r   r   r   )rx   s    r   test_parse_originr      s'   %%D;&a333333:{Aq 9 999999Q<&a";";;;;;9Q<&a";";;;;;9Q<${Aq(A(AAAAA9Q<Q&&a*C*CCCCC9Q<Q&&a*C*CCCCCCCr5   )za <+>za + <(>za + b <# asdf>z<)>za + <)>z<*> aza + <*>za + <foo[bar>za + <foo{bar>za + <foo(bar>z
a + <[bar>z
a + <{bar>za + <{bar[]>za + foo<]>barza + foo[]<]>barza + foo{}<}>barza + foo<)>barza + b<)>z(a) <.>z<(>a + bz
a +< >'fooc                 8   |D ]}g }d }d }|D ]C}|dk    rt          |          }|dk    rt          |          }.|                    |           Dd                    |          }||J t          |           t          t	          |          ||           	  | |           J d            # t
          $ r]}t          |           |j        j        |k    sJ |j        j        d|fv sJ |j        j	        |t          |          fv sJ Y d }~d }~ww xY wd S )N<>ry   Fz!parser failed to report an error!r   )
lenr$   joinr   r   r   r1   r;   startend)	parse_fnerror_descs
error_desclettersr   r   letterbad_codees	            r   _parsing_error_testr      sn   ! > >
  	' 	'F}}G3'llv&&&&777## S___jd8nneS)))	>HX >====  	8 	8 	8!HHH8=H,,,,8>aZ////8<CX#7777777777		8#> >s   B00
D:ADDc                 <      fd}t          |t                     d S )Nc                 &    t          |           S r   )r   )r;   rv   s    r   r   z#test_parse_errors.<locals>.parse_fn  s    T?CCCCr5   )r   _parser_error_tests)rv   r   s   ` r   test_parse_errorsr     s:    D D D D D "566666r5   )|rI   r{   )r   r{   r|   )za | bza * b|cc                      t          ddd          g} t          t          |            t          t          |            t	          |            d S )Nr   rE      r   )r   r   r   _extra_op_parser_testsr   r   s    r   test_parse_extra_opr   #  sT    Q,,-O=/BBBB)?KKKKo666666r5   )$__all__tokenizeior   patsyr   patsy.originr   patsy.infix_parserr   r   r	   r
   patsy.tokensr   r   
patsy.utilr   ru   r   r4   r?   re   _unary_tildert   r   r   r   r   r   r   r   r   r   r   r   rn   r5   r   <module>r      s_   
                    F F F F F F F F F F F F ; ; ; ; ; ; ; ; & & & & & &>>>   $
 $
 $
N4 4 4.( ( (4 xQ%%HS!THS!SHS!SHS!SHS!SHS!SHT1cHS!SHS!S )+    (c
#s S#J #s	
 #s ___  ___ sC#s, #___c23 cCooo#>DE s$D$D$DE "C)I)I)I#J  c???OOO<!" #S///23#$ cC)))*+%& S3()'( c301___c23Cooo./c301:c

3  :+ + +) ) )& & &D D D   6> > >6 ') 7 7 7 7 ???#c301  7 7 7 7 7r5   