
    6h;)                        S SK Jr  SSKJr  SSKJrJrJr  SrSr	Sr
SrS	S
SSSSSSSSSSSSSS.r1 Skr0 rSrS rS rS rS rS rS rS rS rS rS rS  rS! rS" rS# rS$ rS% rS& r g')(    )annotations   )_)errorparserpycompatg      ?   
   2   )   N)   groupr      ))   funcr   r   N)   NN)   kindpatr   N)   N)   negate   )   minusr   N)r
   N)   notr
   NN)r   NN)   andr   N)   NN)   orr   N)   NN)   listr   N)r   NNNN)r      symbolNNN)r      stringNNN)   (   :   -r      !r      &r      |   +   ,r   r   r      end>   r   r   r   s
   .*{}[]?/\_c              #  ~  #    S[        U 5      p![        R                  " U 5      n X:  Ga  X   nUR                  5       (       a  GObUS;   a	  US U4v   GOSUS;   d  US:X  a  XUS-    S;   a  US:X  a  US-  nX   nS nO[        R
                  nUS-  nUnX:  a2  X   nUS	:X  a  US-  nM  Xc:X  a  S
U" XU 5      U4v   OUS-  nX:  a  M2  [        R                  " [        S5      U5      eUR                  5       (       d  U[        ;   d  [        U5      S:  am  UnUS-  nX:  a?  X   nUR                  5       (       d  U[        ;   d  [        U5      S:  d  OUS-  nX:  a  M?  XU nU[        ;   a  US U4v   OSXu4v   US-  nO [        R                  " [        S5      U5      eUS-  nX:  a  GM  SS U4v   g 7f)Nr   s	   (),-:|&+!s   "'   rr   )s   r's   r"r   c                    U $ N xs    7/usr/lib/python3/dist-packages/mercurial/filesetlang.py<lambda>tokenize.<locals>.<lambda>C   s    1       \r   s   unterminated string   r   s   syntax errorr&   )lenr   bytestrisspacer   unescapestrr   
ParseErrorr   isalnum	globcharsordkeywords)programposlcdecodesdsyms           r.   tokenizerE   2   s    Gw'G
'L99;;,dC. KDycAg&.8DyqL$++1HCA'L:1HC6$fWs^&<a@@q ' &&q)?'@!DDYY[[ANc!fslA1HC'L		qI~Q#q	 '
 C.ChD!n$ #))1HC""1_#5s;;q_ '` 4
s   C	F=BF=&AF=5F=c                    [         R                   " [        5      nUR                  [        U 5      5      u  p#U[	        U 5      :w  a   [
        R                  " [        S5      U5      e[         R                  " USS15      $ )Ns   invalid tokenr   r   )	r   elementsparserE   r4   r   r8   r   simplifyinfixops)exprptreer>   s       r.   rH   rH   h   sa    hA'ID
c$iq!12C88""4'5)9::r1   c                j    U (       a  U S   S:X  a  U S   $ [         R                  " [        S5      5      e)Nr   r   r   s   not a symbol)r   r8   r   r,   s    r.   	getsymbolrN   p   s/    QqTYt


1_-
..r1   c                j    U (       a  U S   S:X  d	  U S   S:X  a  U S   $ [         R                  " U5      e)Nr   r   r   r   )r   r8   )r-   errs     r.   	getstringrQ   v   s5    adi1Q49#4t


3
r1   c                    [        U 5      n[        X5      nXB;  a"  [        R                  " [	        S5      U-  5      eSXE4-  $ )Ns   invalid pattern kind: %ss   %s:%s)rN   rQ   r   r8   r   )r-   yallkindsrP   kindpats         r.   
getkindpatrW   |   sD    Q<D
A
Cq!<=DEEtk!!r1   c                ^    U (       a  U S   S:X  a  [        U S   U S   X5      $ [        X5      $ )Nr   r   r   r   )rW   rQ   )r-   rT   rP   s      r.   
getpatternrY      s2    QqTZ!A$!h44Qr1   c                H    U (       d  / $ U S   S:X  a  [        U SS  5      $ U /$ )Nr   r   r   )listr,   s    r.   getlistr\      s,    	twAabE{3Jr1   c                    [        U 5      n[        U5      U:  d  [        U5      U:  a  [        R                  " U5      eU$ r*   )r\   r4   r   r8   )r-   minmaxrP   r?   s        r.   getargsr`      s6    
A
1v|s1v|s##Hr1   c                b   U c  U $ U S   nUS;   a  U $ US:X  a#  [        U S   5        [        U S   5      nXS   U4$ US:X  a  [        U S   5      $ US:X  a  [        R                  " [	        S5      5      eUS	:X  a  [        U S   5      nX4$ US
:X  a   [        U S   5      n[        U S   5      nXU4$ US:X  a  [        S
U S   S	U S   445      $ US;   a  [        S U SS   5       5      nU4U-   $ US:X  a#  [        U S   5        [        U S   5      nXS   U4$ [        R                  " SU-  5      e)Nr      r   r   r   r   r   r   r   s)   can't use negate operator in this contextr   r   r      r   r   c              3  8   #    U  H  n[        U5      v   M     g 7fr*   )_analyze.0rS   s     r.   	<genexpr>_analyze.<locals>.<genexpr>   s     .18A;;   r      invalid operator %r)rN   re   r   r8   r   tupleProgrammingError)r-   opttatbtss         r.   re   re      s^   y	
1B	##	Z!A$QqTNaD!}	X~!~	Yq!MNOO	V|QqTNw	V|ad^ad^|	X~1!~677	.!"..urz	W}!A$ad^aD"~

 
 !7"!<
==r1   c                   U c  SU 4$ U S   nUS;   a  SU 4$ US:X  a  [        U S   5      u  p#X!U44$ US:X  aQ  [        U S   5      u  pE[        U S   5      u  pgXF-   nU(       a!  U(       a  US	XU4S
SR                  U5      444$ XXW44$ US:X  aY  [        S U SS  5       6 u  p[        U	S5      n[        S U	 5       5      S:  a  US	U4U
-   S
SR                  U5      444$ X4U
-   4$ US:X  a&  [        S U SS  5       6 u  p[        U	S5      U4U
-   4$ US:X  a[  [	        U S   5      n[        U S   5      u  pE[        [        R                  U5      SS5      (       a  U4S	XS   U4S
U444$ SXS   U44$ [        R                  " SU-  5      e)aY  Insert hint nodes where status should be calculated (first path)

This works in bottom-up way, summing up status names and inserting hint
nodes at 'and' and 'or' as needed. Thus redundant hint nodes may be left.

Returns (status-names, new-tree) at the given subtree, where status-names
is a sum of status names referenced in the given subtree.
Nr+   r      r   r   r   r   r   r   r   
   withstatusr       r   c              3  8   #    U  H  n[        U5      v   M     g 7fr*   _insertstatushintsrf   s     r.   rh   %_insertstatushints.<locals>.<genexpr>        <e)!,,erj   c              3  8   #    U  H  n[        U5      v   M     g 7fr*   )bool)rg   hs     r.   rh   rz      s     #1tAwwrj   r   c              3  8   #    U  H  n[        U5      v   M     g 7fr*   rx   rf   s     r.   rh   rz      r{   rj   r   _callstatusFrk   )
ry   joinzipsumrN   getattrsymbolsgetr   rm   )r-   rn   r~   ro   harp   hbrq   hrhsrr   fs               r.   ry   ry      s    	y1u	
1B	//1u	V|!!A$'q'z	V|#AaD)#AaD)W"|i25OPPP<	U{<ae<=R[###a'urzItyy}3MNNN52:~	W}<ae<=2r{REBJ&&	W}adO#AaD)7;;q>=%884-"dB)QHHHB!b>!!

 
 !7"!<
==r1   c                  ^ U c  U $ U S   nUS:X  a*  T(       a  [        U S   T5      $ [        U S   SS9nX#U S   4$ US;   a  U $ US	:X  a  [        U S   T5      nX#4$ US
:X  a"  [        U S   T5      n[        U S   T5      nX$U4$ US;   a  [        U4S jU SS  5       5      nU4U-   $ US:X  a  [        U S   SS9nX S   U4$ [        R                  " SU-  5      e)zkRemove redundant status hint nodes (second path)

This is the top-down path to eliminate inner hint nodes.
Nr   ru   r   Tinstatusr   rt   r   r   rc   c              3  <   >#    U  H  n[        UT5      v   M     g 7fr*   )_mergestatushints)rg   rS   r   s     r.   rh   $_mergestatushints.<locals>.<genexpr>   s     A5a$Q115s   r   Frk   )r   rl   r   rm   )r-   r   rn   ro   rp   rq   rr   s    `     r.   r   r      s   
 	y	
1B	]$QqT844adT2qt}	//	V|adH-w	V|qtX.qtX.|	A1QR5AAurz	W}qte4aD"~

 
 !7"!<
==r1   c                F    [        U 5      n[        U5      u  p![        USS9$ )zTransform raw parsed tree to evaluatable tree which can be fed to
optimize() or getmatch()

All pseudo operations should be mapped to real operations or functions
defined in methods or symbols table respectively.
Fr   )re   ry   r   )r-   ro   _hs      r.   analyzer   	  s&     	Aq!EBQ//r1   c                0    Ub  US   S:X  a  SXS   4$ XU4$ )Nr   r   r   r   r+   )rn   rp   rq   s      r.   _optimizeandopsr     s*    	~"Q%6/"e$$B<r1   c                2   / / / p2nU  HQ  n[        U5      u  pVUb  US   S;   a  UR                  U5        M/  UR                  U5        UR                  U5        MS     U(       a2  UR                  [        5        UR                  S[        U5      -   5        X4$ )Nr   rt   )s   patterns)	_optimizeappendWEIGHT_CHECK_FILENAMErl   )xswsrr   ssr-   wro   s          r.   _optimizeunionr     s    RBB|=QqT%GGIIaL
		!
		!  

		'(
		.59,-6Mr1   c                n  ^
 U c  SU 4$ U S   nUS:X  a  [        U S   5      u  p#X!X0S   44$ US;   a  [        U 4$ US:X  a  [        U S   5      u  p#X!U S   U44$ US:X  a  [        U S   5      u  p#X!U44$ US:X  aA  [        U S   5      u  pE[        U S   5      u  pgXF::  a  U[        XU5      4$ U[        XU5      4$ US	:X  ab  [        U SS  5      u  m
n[	        U5      S:X  a
  T
S   US   4$ [        S
 [        [        U5      U
4S jS9 5       5      n[        T
5      U4U-   4$ US:X  a&  [        S U SS   5       6 u  m
n[        T
5      U4U-   4$ US:X  aI  [        U S   5      n	[        [        R                  U	5      SS5      n[        U S   5      u  pEX$-   XS   U44$ [        R                   " SU-  5      e)Nr   ru   r   r   rb   r   r   r   r   c              3  *   #    U  H	  oS    v   M     g7f)r   Nr+   )rg   its     r.   rh   _optimize.<locals>.<genexpr>F  s      
KbqEKs   c                   > TU S      $ )Nr   r+   )r   r   s    r.   r/   _optimize.<locals>.<lambda>G  s    BqEr1   )keyr   c              3  8   #    U  H  n[        U5      v   M     g 7fr*   r   rf   s     r.   rh   r   K  s     3Uy||Urj   r   _weightrk   )r   r   r   r   r4   rl   sorted	enumerater_   r   r   rN   r   r   r   r   rm   )r-   rn   r   ro   warp   wbrq   rr   r   r   s             @r.   r   r   +  s   y!t	
1B	]1qA$-	##$a''	Z1qtQ-	V|1q'z	V|1Q41Q48rr222rr222	U{!"&Br7a<a5"Q%< 
"9R=6JK
 
 2w
""	W}3QqrU34B2w
""	W}adOGKKNIq11Q4vaD"~%%

 
 !7"!<
==r1   c                     [        U 5      u  pU$ )zkReorder/rewrite evaluatable tree for optimization

All pseudo operations should be transformed beforehand.
r   )r-   _wro   s      r.   optimizer   U  s    
 aLEBHr1   c                0    [         R                  " U S5      $ )N)r   r   )r   prettyformat)rL   s    r.   r   r   ^  s    t%;<<r1   N)!
__future__r   i18nr    r   r   r   r   WEIGHT_READ_CONTENTSWEIGHT_STATUSWEIGHT_STATUS_THOROUGHrG   r<   r   r:   rE   rH   rN   rQ   rW   rY   r\   r`   re   ry   r   r   r   r   r   r   r   r+   r1   r.   <module>r      s    #       D
2
90
..
,,
+
+
-
%//'!& #
	3l;/ ">D)>X>D	0 '>T=r1   