
    sh&                    T   S SK r S SKrS SKrS SKJr  S SKJr  / SQr " S S\5      r	 " S S\5      r
 " S S	\5      r " S
 S\5      r " S S\ R                  5      r\" 5       R!                  \R"                  5        \r\\-  r\\-  \-  r\S \\0r\\-  \-  \-  \-  \ -  r!\\"-  \#-  \$-  \%-  \&-  \-  r'\(" \RR                  5      r*\(" \RV                  5      r,\*\,-  r-\(" \R\                  5      r/\(" \R`                  5      r1\(" S5      \(" S/5      -  r2\-\(" S5      -  r3\-\(" S5      -  r4Sr5\Rl                  " 5       r7\7S-  r8S\8-  S-
  r9\\\\\"\\#\\ \$\\\\%\&S.r:\\"-  r;S r<\\"-  r=\\=-  r>S S \S \"\"\=\=0r?SSSS.r@SrA " S S5      rB\B" 5       rC\D" \AR                  5       5       H  u  rFrG\H" \C\G\F5        M     SS jrIS rJS rKS rLS  rMS! rNS" rOS# rPSS% jrQS& rRS' rSS( rTS) rUS* rVS+ rWS, rXS-S.S/S0.rYS1 rZS2 r[S3 r\S4 r]S5 r^S6 r_S7 r`S8 raS9 rbS: rcS; rdS< reS= rfS> rgS? rhS@ riSA rjSB rkSC rlSD rmSE rnSF roSG rpSH rqSI rrSJ rsSK rtSL ruSSM jrvSN rwSO rxSP rySQ rzSR r{SS r|ST r}SU r~SV rSW rSX rSY rSZ rS[ rS\ rS] rS^ rS_ rS` rSa rSb rSc rSd rSe r\" SfR                  5       5      r\" SgR                  5       5      rSSh jrSi rSj rSk rSl rSmrSrSrSrSrSnrSoSpSq.r\<S\"Sr\S\=Ss0rSt r " Su Sv5      r " Sw Sx\5      r " Sy Sz\5      r " S{ S|\5      r " S} S~\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S5      r " S S5      rS rS r " S S5      r\GR                  " 5       r0 r\GR                  5        Hg  u  ru  rr\GR                  \S0 45      u  rr\" \\\S9r\\4\\'   \GR                  5        H"  u  rr\" \GR                  \S5      \\S9\\'   M$     Mi     SSSSSSSS.r\" SSS5      \" SSS$5      \" SSS5      \" SSS5      \" SSS$5      \" SSS5      \" SSS$5      S.r\" 5       \" 5       \" S$5      \" 5       \" 5       \" 5       \" 5       S.r\" \5      r\R!                  \" 5       \" S$5      \" 5       \" 5       S.5        \" 5       \" 5       \" 5       \" 5       S.rg)    N)defaultdict)%AASCIIB	BESTMATCHDDEBUGEENHANCEMATCHFFULLCASEI
IGNORECASELLOCALEM	MULTILINEPPOSIXRREVERSESDOTALLTTEMPLATEUUNICODEV0VERSION0V1VERSION1WWORDXVERBOSEerrorScanner	RegexFlagc                   "    \ rS rSrSrSS jrSrg)r&      am  Exception raised for invalid regular expressions.

Attributes:

    msg: The unformatted error message
    pattern: The regular expression pattern
    pos: The position in the pattern where compilation failed, or None
    lineno: The line number where compilation failed, unless pos is None
    colno: The column number where compilation failed, unless pos is None
Nc                 x   [        U[        5      (       a  SOSnXl        X l        X0l        Ubw  Ubt  UR                  USU5      S-   U l        X2R                  USU5      -
  U l        SR                  X5      nXB;   a)  USR                  U R                  U R                  5      -  n[        R                  X5        g )N
   
r      z{} at position {}z (line {}, column {}))
isinstancestrmsgpatternposcountlinenorfindcolnoformat	Exception__init__)selfmessager2   r3   newlines        e/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/regex/_regex_core.pyr:   error.__init__*   s    $Wc22$3?!--C81<DK}}Wa==DJ)00>G!299$++**  	4)    )r7   r5   r1   r2   r3   )NN)__name__
__module____qualname____firstlineno____doc__r:   __static_attributes__ r@   r>   r&   r&      s    	*r@   r&   c                       \ rS rSrSrg)_UnscopedFlagSet=   rG   NrA   rB   rC   rD   rF   rG   r@   r>   rI   rI   =       r@   rI   c                       \ rS rSrSrg)
ParseErrorA   rG   NrK   rG   r@   r>   rN   rN   A   rL   r@   rN   c                       \ rS rSrSrg)_FirstSetErrorE   rG   NrK   rG   r@   r>   rQ   rQ   E   rL   r@   rQ   c                       \ rS rSrS=rrS=rrS=rr	S=r
rS=rrS=rrS=rrS	=rrS
=rrS=rrS=rrS=rrS=rrS=rrS=r r!S=r"r#S=r$r%S r&\'RP                  r(Sr)g)r(   I      i   i   i   i @           i   i          i       i   @   r.   c                    U R                   b  SU R                   -  $ U R                  n/ nUS:  nU(       a  U) nU R                   HE  nXR                  -  (       d  M  XR                  ) -  nUR                  SUR                   -  5        MG     U(       a  UR                  [	        U5      5        SR                  U5      nU(       a  [        U5      S:  a  SU-  nU$ SU-  nU$ )Nzregex.%sr   |r.   z~(%s)z~%s)_name__value_	__class__appendhexjoinlen)r;   valuemembersnegativemress         r>   __repr__RegexFlag.__repr__]   s    ;;"++19FEAyy  ))#zAHH45  
 NN3u:&hhw7|am 
 ck
r@   rG   N)*rA   rB   rC   rD   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r   r   rk   object__str__rF   rG   r@   r>   r(   r(   I   s    AA	AAAA
AA	AAAABBAAA: nnGr@   r(   z()|?*+{^$.[\# z -z &_-.)||~~&&--rX   r.   )abefir   ri   prsur   r    wxrV   rW   )r~   r|   r   a  
FAILURE
SUCCESS
ANY
ANY_ALL
ANY_ALL_REV
ANY_REV
ANY_U
ANY_U_REV
ATOMIC
BOUNDARY
BRANCH
CALL_REF
CHARACTER
CHARACTER_IGN
CHARACTER_IGN_REV
CHARACTER_REV
CONDITIONAL
DEFAULT_BOUNDARY
DEFAULT_END_OF_WORD
DEFAULT_START_OF_WORD
END
END_OF_LINE
END_OF_LINE_U
END_OF_STRING
END_OF_STRING_LINE
END_OF_STRING_LINE_U
END_OF_WORD
FUZZY
GRAPHEME_BOUNDARY
GREEDY_REPEAT
GROUP
GROUP_CALL
GROUP_EXISTS
KEEP
LAZY_REPEAT
LOOKAROUND
NEXT
PROPERTY
PROPERTY_IGN
PROPERTY_IGN_REV
PROPERTY_REV
PRUNE
RANGE
RANGE_IGN
RANGE_IGN_REV
RANGE_REV
REF_GROUP
REF_GROUP_FLD
REF_GROUP_FLD_REV
REF_GROUP_IGN
REF_GROUP_IGN_REV
REF_GROUP_REV
SEARCH_ANCHOR
SET_DIFF
SET_DIFF_IGN
SET_DIFF_IGN_REV
SET_DIFF_REV
SET_INTER
SET_INTER_IGN
SET_INTER_IGN_REV
SET_INTER_REV
SET_SYM_DIFF
SET_SYM_DIFF_IGN
SET_SYM_DIFF_IGN_REV
SET_SYM_DIFF_REV
SET_UNION
SET_UNION_IGN
SET_UNION_IGN_REV
SET_UNION_REV
SKIP
START_OF_LINE
START_OF_LINE_U
START_OF_STRING
START_OF_WORD
STRING
STRING_FLD
STRING_FLD_REV
STRING_IGN
STRING_IGN_REV
STRING_REV
FUZZY_EXT
c                       \ rS rSrSrg)	Namespacei  rG   NrK   rG   r@   r>   r   r     rL   r@   r   c                    [        U R                  5       5      n[        U5      U-
  nUS:  a  gX4-  U-   nSSKn[	        US5      (       d  gUR                  XW5       H  n	 X		 M     UR                  5         0 n
[        U 5       H  u  ppnnXXXU4'    X,U4   XU4'   M     UR                  5         UR                  U
5        g! [         a     Mt  f = f! [         a     M^  f = f)a+  Make room in the given cache.

Args:
    cache_dict: The cache dictionary to modify.
    args_dict: The dictionary of named list args used by patterns.
    max_length: Maximum # of entries in cache_dict before it is shrunk.
    divisor: Cache will shrink to max_length - 1/divisor*max_length items.
r   Nsample)	tuplekeysre   randomhasattrr   KeyErrorclearupdate)
cache_dict	args_dictlocale_sensitive
max_lengthdivisor
cache_keysoveragenumber_to_tossr   
doomed_keysensitivity_dictr2   pattern_typeflagsargsdefault_versionlocales                    r>   _shrink_cacher     s    z()J*o
*G{ 	*W4N 68$$ 	mmJ?
	& @ OOGLZGXCuOVKO'GH	6FU\G\6]723 HY ,-  		  		s$   !C
C
CC
C#"C#c                 |    U R                   nU[        -  S:X  a  X R                  -  n[        R                  " X!5      $ )zFolds the case of a string.r   )r   _ALL_ENCODINGSguess_encoding_regex	fold_case)infostringr   s      r>   
_fold_caser   ?  s7    JJE1$$$$E**r@   c                 \    [        [        R                  " U R                  U5      5      S:  $ z$Checks whether a character is cased.r.   )re   r   get_all_casesr   )r   chars     r>   
is_cased_ir   G  s#    v##DJJ56::r@   c                 F    [        [        R                  " X5      5      S:  $ r   )re   r   r   )r   r   s     r>   
is_cased_fr   K  s    v##E01A55r@   c                     [        U R                  [        -  5      n[        XU5      nU(       d  / $ UR	                  U5      $ )z&Compiles the firstset for the pattern.)boolr   r   _check_firstsetcompile)r   fsreverses      r>   _compile_firstsetr   O  s:    4::'(G		+B	 ::gr@   c                    U(       a  SU;   a  g[        5       n[        nU H[  n[        U[        5      (       a  UR                  (       d    gXER
                  -  nUR                  UR                  [        S95        M]     U[        [        -  :X  a  g[        U [        U5      U[        ) -  SS9nUR                  XSS9nU$ )z$Checks the firstset for the pattern.N
case_flagsTr   	zerowidthin_set)setNOCASEr/   	Characterpositiver   add
with_flagsr   r   SetUnionlistoptimise)r   r   r   rg   r   rx   s         r>   r   r   Y  s     eGJa##AJJ 	ll"
ALLFL34  h+, 
$W*y2H
B	T4	0BIr@   c                 >    / nU  H  nUR                  U5        M     U$ )z(Flattens the code from a list of tuples.)extend)code	flat_codecs      r>   _flatten_coder   x  s'    I  r@   c                 p    U R                   [        -  nU R                   [        -  (       a
  U[        ) -  nU$ )zMakes the case flags.)r   
CASE_FLAGSr   r   )r   r   s     r>   make_case_flagsr     s/    JJ#E zzE(Lr@   Fc                 L    U(       a  [        U5      $ [        U[        U 5      S9$ )zMakes a character literal.r   )r   r   )r   rf   r   s      r>   make_characterr     s"    Ut'<==r@   c                 *    [        XU[        U 5      S9$ )zMakes a group reference.r   )RefGroupr   )r   namepositions      r>   make_ref_groupr     s    D_T5JKKr@   c                 (    [        X[        U 5      S9$ )zMakes a string set.r   )	StringSetr   )r   r   s     r>   make_string_setr     s    TOD,ABBr@   c                 D    U(       a  U$ UR                  [        U 5      S9$ )zMakes a property.r   )r   r   )r   propr   s      r>   make_propertyr     s     ??od&;?<<r@   c                     [        X5      /nU R                  S5      (       a2  UR                  [        X5      5        U R                  S5      (       a  M2  [        U5      S:X  a  US   $ [	        U5      $ )zParses a pattern, eg. 'a|b|c'.r^   r.   r   )parse_sequencematchrb   re   Branch)sourcer   branchess      r>   _parse_patternr     sc    v,-H
,,s

v45 ,,s

 8}{(r@   c           	          S/n[        U5      n U R                  nU R                  5       nU[        ;   Ga  US;   a  X@l        GOUS:X  a  UR	                  [        XS5      5        GOUS:X  a.  [        X5      nUc  [        U5      nGOUR	                  U5        GOUS:X  a  UR                  [        -  (       a  UR	                  [        5       5        GOUR                  [        -  (       a  UR	                  [        5       5        GOOUR	                  [        5       5        GO4US:X  a  UR	                  [        X5      5        GOUS:X  a  UR                  [        -  (       aN  UR                  [        -  (       a  UR	                  [        5       5        GOUR	                  [!        5       5        GOUR	                  [#        5       5        GOUS	:X  a  UR                  [        -  (       aN  UR                  [        -  (       a  UR	                  [%        5       5        GO:UR	                  ['        5       5        GOUR                  [        -  (       a  UR	                  [)        5       5        OUR	                  [+        5       5        OUS
;   a  [-        XU5      nU(       a   [/        XXsUXB5        UR	                  S5        O[1        XXS5      nU(       a  [3        XXXB5        UR	                  S5        OhUR	                  [5        [7        U5      US95        OEUR	                  [5        [7        U5      US95        O"UR	                  [5        [7        U5      US95        GMJ  U V	s/ s H	  oc  M  U	PM     nn	[9        U5      $ s  sn	f )zParses a sequence, eg. 'abc'.Nz)|\F(.[^$z?*+{r   )r   r3   getSPECIAL_CHARSrb   parse_escapeparse_parenr   r   AnyAllr#   AnyUAny	parse_setr   StartOfLineUStartOfLineStartOfString
EndOfLineU	EndOfLineEndOfStringLineUEndOfStringLineparse_quantifierapply_quantifierparse_fuzzyapply_constraintr   ordSequence)
r   r   sequencer   	saved_poschelementcountsconstraintsitems
             r>   r   r     ss   vH &J
JJ	ZZ\Tz&
tV5 ABs%f3?!0!6JOOG,s::&OOFH-ZZ$&OODF+OOCE*s	& 78s::	)zzD( 7 6OOMO4s::	)zzD( 
5 	4zzD( (8(:; (9:v)&;$V6r+OOD) #.fB"KK"({#/ - !	#b'%/)1 2 	#b'j IJ OOIc"g*EFW Z "*>H>H ?s   M;(M;c                    UR                  5       nUc5  U(       a  [        SU R                  U5      e[        SU R                  U5      e[        U[        [
        [        45      (       a  [        SU R                  U5      eUu  pU R                  nU R                  5       nUS:X  a  [
        n
OUS:X  a  [        n
OXPl        [        n
UR                  5       (       d  US:w  d  U	S:w  a	  U
" XxU	5      nUR                  U5        g )Nzmultiple repeatznothing to repeat?+r.   )popr&   r   r/   GreedyRepeat
LazyRepeatPossessiveRepeatr3   r   is_emptyrb   )r   r   r   r   r   r   r   r   	min_count	max_countrepeateds              r>   r   r     s    llnG)6==)DD'	BB'L*6FGHH%v}}i@@!I

I	B	Sy	s# 
 9>Y!^7y9OOGr@   c                    UR                  5       nUc  [        SU R                  U5      e[        U[        5      (       a-  [        UR                  U5      Ul        UR                  U5        g UR                  [        Xb5      5        g )Nznothing for fuzzy constraint)r  r&   r   r/   GroupFuzzy
subpatternrb   )r   r   r   r   r   r   r   s          r>   r   r     sg    llnG2FMM9MM '5!!"7#5#5{C g34r@   )r   r.   r   Nr.   N)r  *r  c                 t    [         R                  U5      nU(       a  U$ US:X  a  [        U 5      nU(       a  U$ g)zParses a quantifier.{N)_QUANTIFIERSr   parse_limited_quantifier)r   r   r   qr   s        r>   r   r   /  s6    A	Sy)&1Mr@   c                 *    U SL=(       a	    U [         :  $ )z,Checks whether a count is above the maximum.N	UNLIMITED)r4   s    r>   is_above_limitr  >  s    3)!33r@   c                    U R                   n[        U 5      nU R                  S5      (       a4  [        U 5      n[        U=(       d    S5      nU(       a  [        U5      OSnOU(       d  Xl         g[        U5      =p#U R                  S5      (       d  Xl         g[	        U5      (       d  [	        U5      (       a  [        SU R                  U5      eUb  X#:  a  [        SU R                  U5      eX#4$ )zParses a limited quantifier.,r   N}zrepeat count too bigz"min repeat greater than max repeat)r3   parse_countr   intr  r&   r   )r   r   r  r	  s       r>   r  r  B  s    

IF#I||C'	 	Q'	&/C	NT	"J #I.	<<
i  N9$=$=*FMM9EE!68&--
 	 r@   c                    U R                   nUS:w  a  g0 n [        X5        U R                  S5      (       a#  [        X5        U R                  S5      (       a  M#  U R                  S5      (       a  [	        XU5      US'   U R                  S5      (       d!  [        SU R                  U R                   5      eU$ ! [         a	    X@l          gf = f)z#Parses a fuzzy setting, if present.r  Nr  :testr  z
expected })r3   parse_fuzzy_itemr   rN   parse_fuzzy_testr&   r   )r   r   r   r   r   r   s         r>   r   r   `  s    

I	SyK-ll3V1 ll3 ||C.vZHF<<L&--<<  
s   AB9 9CCc                 v    U R                   n [        X5        g! [         a    X l         [        X5         gf = f)zParses a fuzzy setting item.N)r3   parse_cost_constraintrN   parse_cost_equation)r   r   r   s      r>   r#  r#  x  s4    

I1f2 1
F01s    88c                    U R                   nU R                  5       nU[        ;   af  [        XU5      n[	        U 5      nUc  SX'   gU R                   n[        U 5      nU(       d  US-  nUS:  a  [        SU R                  U5      eSU4X'   gU[        ;   a  X l         U R                   n[        U 5      n[	        U 5      n	U	c
  [        5       e[        XU R                  5       5      n[	        U 5      nUc
  [        5       eU R                   n[        U 5      nU	(       d  US-  nU(       d  US-  nSUs=::  a  U::  d  O  [        SU R                  U5      eX4X'   g[        5       e)zParses a cost constraint.Nr  r.   r   bad fuzzy cost limit)
r3   r   ALPHAparse_constraintparse_fuzzy_compareparse_cost_limitr&   r   DIGITSrN   )
r   r   r   r   
constraintmax_inccost_posmax_costmin_costmin_incs
             r>   r&  r&    sN   

I	B	U{%f2>
%f-?&-K# zzH'/H A!|2FMM8LL&'kK#	v
 ::#F+%f-?,%f6::<H
%f-?, ::#F+ MHMHH((.xHH"*"4lr@   c                     U R                   n[        U 5      n [        U5      $ ! [         a     Of = f[	        SU R
                  U5      e)zParses a cost limit.r)  )r3   r  r  
ValueErrorr&   r   )r   r1  digitss      r>   r-  r-    sL    zzH F6{  &x
@@s   
$ 
11c                 D    US;  a
  [        5       eX!;   a
  [        5       eU$ )zParses a constraint.deis)rN   )r   r   r   s      r>   r+  r+    s%    	l	lIr@   c                 `    U R                  S5      (       a  gU R                  S5      (       a  gg)zParses a cost comparator.z<=T<FNr   r   s    r>   r,  r,    s)    ||D	c		r@   c                    SU;   a!  [        SU R                  U R                  5      e0 n[        X5        U R	                  S5      (       a#  [        X5        U R	                  S5      (       a  M#  [        U 5      nUc
  [        5       e[        [        U 5      5      nU(       d  US-  nUS:  a!  [        SU R                  U R                  5      eXBS'   X!S'   g)	zParses a cost equation.costzmore than one cost equationr  Nr.   r   r)  max)	r&   r   r3   parse_cost_termr   r,  rN   r  r  )r   r   r?  r0  r2  s        r>   r'  r'    s    16==&**MMDF!
,,s

% ,,s

 "&)Gl;v&'HA!|*FMM6::FFKr@   c                     [        U 5      nU R                  5       nUS;  a
  [        5       eX1;   a!  [        SU R                  U R
                  5      e[        U=(       d    S5      X'   g)zParses a cost equation term.diszrepeated fuzzy costr.   N)r  r   rN   r&   r   r3   r  )r   r?  coeffr   s       r>   rA  rA    sR    E	B	l	z)6==&**EE5:ADHr@   c                    U R                   nU R                  5       nU[        ;   a  US:X  a  [        XS5      $ US:X  aN  UR                  [
        -  (       a
  [        5       $ UR                  [        -  (       a
  [        5       $ [        5       $ US:X  a  [        X5      $ [        SU R                  U5      eU(       a  [        [        U5      US9$ [        SU R                  U5      e)Nr   Fr   r   zexpected character setr   )r3   r   r   r   r   r   r   r#   r   r   r   r&   r   r   r   )r   r   r   r   r   s        r>   r$  r$    s    

I	B	]:e443YzzF"xd"vu3YV**0&--KK	RZ88,fmmYGGr@   c                 ,    U R                  [        5      $ )z0Parses a quantifier's count, which can be empty.)	get_whiler.  r=  s    r>   r  r    s    F##r@   c                 X   U R                   nU R                  S5      nUS:X  Ga  U R                   nU R                  S5      nUS:X  a  U R                   nU R                  5       nUS;   a  [        XSUS:H  5      $ XPl         [        U 5      nUR	                  U5      nU R                  S5        UR                  n [        X5      n	U R                  S5        Xl        [        UR                  [        -  5      U l
        UR                  5         [        XU	5      $ US;   a  [        XSUS:H  5      $ US	:X  a  [        X5      $ US
:X  a  [        U 5      $ US:X  a  [        X5      $ US:X  a  [!        X5      $ US:X  a  [#        X5      $ US:X  d  SUs=::  a  S::  a  O  O[%        XX45      $ US:X  a  ['        XU5      $ X@l         [)        X5      $ US:X  a  U R                   nU R+                  [-        S5      SS9n
U
SS R/                  5       (       aF  [0        R                  U
5      nU(       d  [3        SU R4                  U5      eU R                  S5        U$ X l         UR	                  5       nUR                  n [        X5      n	U R                  S5        Xl        [        UR                  [        -  5      U l
        UR                  5         [        XU	5      $ ! Xl        [        UR                  [        -  5      U l
        f = f! Xl        [        UR                  [        -  5      U l
        f = f)zSParses a parenthesised subpattern or a flag. Returns FLAGS if it's an
inline flag.
Tr  r;  =!rJ  >)Fr   #r   r^   r   09&r  )>includeNr.   zunknown verb)r3   r   parse_lookaround
parse_name
open_groupexpectr   r   r   r%   ignore_spaceclose_groupr  parse_extensionparse_commentparse_conditionalparse_atomicparse_commonparse_call_groupparse_call_named_groupparse_flags_subpatternrG  r   isalphaVERBSr&   r   )r   r   r   r   saved_pos_2saved_pos_3r   groupsaved_flagsr  wordverbs               r>   r   r   #  s    

I	D	B	SyjjZZ9 **KBZ'dB#IFF %Jf%DOOD)EMM#**KA+F9
c"(
&*4::+?&@#j11#F%sCC9"6009 ((9$V229--9--9r(S(#F"BB9)&DD !
%f33	SyjjD	591:99T?DNFMM;GGMM#K JOOE**K9#F1
c 
"4::#78j))y )
&*4::+?&@#l !
"4::#78s   :K 5L  )K= )L)c                    U R                   nU R                  5       nUS:X  a  [        U 5      nUR                  U5      nU R	                  S5        UR
                  n [        X5      nU R	                  S5        Xal        [        UR
                  [        -  5      U l	        UR                  5         [        XU5      $ US:X  aT  [        U SS9nU R	                  S5        UR                  U5      (       a  [        SU R                  U5      e[        XU5      $ US:X  d  US:X  a  [!        XU5      $ X l         [        S	U R                  U5      e! Xal        [        UR
                  [        -  5      U l	        f = f)
zParses a Python extension.r;  rL  rM  rJ  T)allow_numericcannot refer to an open grouprQ  unknown extension)r3   r   rV  rW  rX  r   r   r   r%   rY  rZ  r  is_open_groupr&   r   r   ra  )r   r   r   r   r   rg  rh  r  s           r>   r[  r[  }  sC   

I	B	Sy&!%cjj	='5JMM#$J"&tzzG';"<FT*--	Sy&5cd##7  d)44	SyB#I%fI>>J
#V]]I
>>) %J"&tzzG';"<Fs   E )E4c                      U R                   nU R                  S5      nU(       a  US:X  a  OUS:X  a  U R                  S5      nMD  Xl         U R                  S5        g)zParses a comment.TrM  r   N)r3   r   rX  )r   r   r   s      r>   r\  r\    sX    
JJ	JJtAH9

4 A  J
MM#r@   c                    UR                   n [        X5      nU R                  S5        XAl         [        UR                   [        -  5      U l        [        X#U5      $ ! XAl         [        UR                   [        -  5      U l        f = f)zParses a lookaround.rM  )r   r   rX  r   r%   rY  
LookAround)r   r   behindr   rh  r  s         r>   rU  rU    sm    **K9#F1
c 
"4::#78f
33 !
"4::#78s   A )Bc                 P   UR                   nU R                  nU R                  5       nUS:X  ay  U R                  5       nUS;   a  [        XSUS:H  5      $ US:X  a&  U R                  5       nUS;   a  [        XSUS:H  5      $ X0l        [	        SU R
                  U R                  5      eX0l         [        U S5      nU R                  S5        [        X5      nU R                  S	5      (       a  [        X5      nO
[        5       nU R                  S5        X!l         [        UR                   [        -  5      U l        UR                  5       (       a  UR                  5       (       a
  [        5       $ [        XXgU5      $ ! X!l         [        UR                   [        -  5      U l        f = f)
z Parses a conditional subpattern.r  rI  FrJ  r;  Tzexpected lookaround conditionalrM  r^   )r   r3   r   parse_lookaround_conditionalr&   r   rV  rX  r   r   r   r   r%   rY  r  Conditional)r   r   rh  r   r   rg  
yes_branch	no_branchs           r>   r]  r]    sn   **K

I	B	SyZZ\/eR3YOO9BZ3F$I   
5v}}
** 	 J964(c#F1
<<&v4I 
Ic 
"4::#78!3!3!5!5ztJ9EE !
"4::#78s   /A%E< <)F%c                    UR                   n [        X5      nU R                  S5        XAl         [        UR                   [        -  5      U l        [        X5      nU R                  S5      (       a  [        X5      nO
[        5       nU R                  S5        [        X#XVU5      $ ! XAl         [        UR                   [        -  5      U l        f = f)NrM  r^   )
r   r   rX  r   r%   rY  r   r   r   LookAroundConditional)r   r   rs  r   rh  r  rw  rx  s           r>   ru  ru    s    **K9#F1
c 
"4::#78-J||C"60	J	
MM# :  !
"4::#78s   B& &)Cc                    UR                   n [        X5      nU R                  S5        X!l         [        UR                   [        -  5      U l        [        U5      $ ! X!l         [        UR                   [        -  5      U l        f = f)zParses an atomic subpattern.rM  )r   r   rX  r   r%   rY  Atomic)r   r   rh  r  s       r>   r^  r^    sk    **K9#F1
c 
"4::#78* !
"4::#78s   A )Bc                 |   UR                   n[        X5      /nUR                   nU R                  S5      (       aM  X!l         UR                  [        X5      5        [	        XAR                   5      nU R                  S5      (       a  MM  XAl         U R                  S5        [        U5      S:X  a  US   $ [        U5      $ )zParses a common groups branch.r^   rM  r.   r   )group_countr   r   rb   r@  rX  re   r   )r   r   initial_group_countr   final_group_counts        r>   r_  r_  	  s     **v,-H((
,,s

.v45 13C3CD ,,s


 )
MM#
8}{(r@   c                 |    US:X  a  SnOX R                  [        5      -   nU R                  S5        [        XU5      $ )zParses a call to a group.r   rO  rM  )rG  r.  rX  	CallGroup)r   r   r   r3   rg  s        r>   r`  r`    s:    	Sy%%f--
MM#T#&&r@   c                 R    [        U 5      nU R                  S5        [        XU5      $ )zParses a call to a named group.rM  )rV  rX  r  )r   r   r3   rg  s       r>   ra  ra  &  s%    vE
MM#T#&&r@   c                     Sn  U R                   nU R                  5       nUS:X  a  X0R                  5       -  nU[        U   -  nMB  ! [         a    WU l          U$ f = f)zParses a set of inline flags.r   V)r3   r   REGEX_FLAGSr   )r   r   r   r   s       r>   parse_flag_setr  -  sh    E

IBSyjjl"[_$E   
Ls   AA AAc                     [        U 5      nU R                  S5      (       a4  [        U 5      nU(       d!  [        SU R                  U R                  5      eOSnU[
        -  (       a  SUl        X#4$ )z!Parses flags being turned on/off.-z$bad inline flags: no flags after '-'r   T)r  r   r&   r   r3   r   inline_localer   r   flags_on	flags_offs       r>   parse_flagsr  =  sj    f%H||C"6*	>jj   	&!r@   c                 p   UR                   nUR                   U-  U) -  Ul         [        UR                   [        -  5      U l         [	        X5      nU R                  S5        XAl         [        UR                   [        -  5      U l        U$ ! XAl         [        UR                   [        -  5      U l        f = f)z&Parses a subpattern with scoped flags.rM  )r   r   r%   rY  r   rX  )r   r   r  r  rh  r  s         r>   parse_subpatternr  N  s    **K**x'I:5DJtzzG34F9#F1
c 
"4::#78 !
"4::#78s   B )B5c                 <   [        X5      u  p#U[        -  (       a!  [        SU R                  U R                  5      eX#-  (       a!  [        SU R                  U R                  5      eX!R
                  ) -  [        -  nU(       a*  U=R
                  U-  sl        [        UR
                  5      eU[        ) -  nU R                  S5      (       a  [        XX#5      $ U R                  S5      (       a  [        XX#5        g[        SU R                  U R                  5      e)zParses a flags subpattern. It could be inline flags or a subpattern
possibly with local flags. If it's a subpattern, then that's returned;
if it's a inline flags, then None is returned.
z-bad inline flags: cannot turn off global flagz(bad inline flags: flag turned on and offr!  rM  Nrn  )
r  GLOBAL_FLAGSr&   r   r3   global_flagsrI   r   r  parse_positional_flags)r   r   r  r  new_global_flagss        r>   rb  rb  \  s    
 &f3H<C
--% 	% >
** 	 !$5$5#55E-- t0011 H||ChBB||CvXA
#V]]FJJ
??r@   c                 v    UR                   U-  U) -  Ul         [        UR                   [        -  5      U l        g)zParses positional flags.N)r   r   r%   rY  r  s       r>   r  r    s/    **x'I:5DJtzzG34Fr@   c                    U R                  [        S5      SS9nU(       d!  [        SU R                  U R                  5      eUR                  5       (       aE  U(       a  SOSnU(       a  [        U5      U:  a!  [        SU R                  U R                  5      e U$ UR                  5       (       d!  [        SU R                  U R                  5      eU$ )zParses a name.rR  FrS  zmissing group namer   r.   zbad character in group name)rG  r   r&   r   r3   isdigitr  isidentifier)r   rl  allow_group_0r   	min_groups        r>   rV  rV    s    CIu5D(&--DD||~~&AA	D	I 55v}}jj  !6 K	   ""5v}}jj  Kr@   c                 &    [        S U  5       5      $ )z!Checks whether a string is octal.c              3   2   #    U  H  o[         ;   v   M     g 7fN)
OCT_DIGITS.0r   s     r>   	<genexpr>is_octal.<locals>.<genexpr>       1&BZ&   allr   s    r>   is_octalr        1&111r@   c                 &    [        S U  5       5      $ )z#Checks whether a string is decimal.c              3   2   #    U  H  o[         ;   v   M     g 7fr  )r.  r  s     r>   r  is_decimal.<locals>.<genexpr>  s     -fV|fr  r  r  s    r>   
is_decimalr    s    -f---r@   c                 &    [        S U  5       5      $ )z'Checks whether a string is hexadecimal.c              3   2   #    U  H  o[         ;   v   M     g 7fr  )
HEX_DIGITSr  s     r>   r  !is_hexadecimal.<locals>.<genexpr>  r  r  r  r  s    r>   is_hexadecimalr    r  r@   c                 Z   U R                   nSU l         U R                  5       nX0l         U(       d!  [        SU R                  U R                  5      eU[
        ;   a  [        XU[
        U   X$5      $ US:X  a  U(       d  U R                  n [        X5      $ US:X  a  U(       d
  [        5       $ US:X  a  U(       d  [        X5      $ US:X  a  [        XU5      $ US;   a  [        XUS:H  U5      $ US	:X  aw  U(       dp  / S
QnUR                  [        :X  a  UR!                  / SQ5        [#        [%        ['        SS/5      [)        UU Vs/ s H  n[+        U5      PM     sn5      /5      5      $ US:X  a  U(       d
  [-        5       $ U[.        ;   a  U(       dL  UR0                  [2        -  (       a  [4        R                  U5      nO[6        R                  U5      nU(       a  U$ [8        R                  U5      nU(       a  U$ [:        R                  U5      nU(       a  [+        [        U5      5      $ [        SU-  U R                  U R                  5      eU[<        ;   a  [?        XXB5      $ [        U[        U5      U5      $ ! [         a	    XPl         Of = f[        U[        U5      U5      $ s  snf )zParses an escape sequence.Fbad escape (end of pattern)gGr   NpPry   r   )
            )   i(   i)   r  r  r$   bad escape \%s) rY  r   r&   r   r3   HEX_ESCAPESparse_hex_escapeparse_group_refr   r   SearchAnchorparse_string_setparse_named_charparse_propertyr   r   r   r|  r   Stringr   r   Graphemer*  r   r#   WORD_POSITION_ESCAPESPOSITION_ESCAPESCHARSET_ESCAPESCHARACTER_ESCAPESr.  parse_numeric_escape)	r   r   r   saved_ignorer   r   charsetr   rf   s	            r>   r   r     sQ   &&LF	B&16==&**MM	[b+b/6NN	s6JJ		#"600 
s6~	s6--	sf55	tfB#Iv>>	s6*')NN12ffdD\2HTDa ENaLD 5     	 	s6z	u zzD -11"5(,,R0##B'L!%%b)SZ((%*FMM6::FF	v#F"== dCGV44m  	#"J	# dCGV44&Ds   
I< J(<JJc                 2   U(       d  US:X  a  [        XU/U5      $ UnU R                  nU R                  5       nU[        ;   a  XB-  nU R                  nU R                  5       n[	        U5      (       aR  U[
        ;   aH  UR                  [        -  nU[        :X  d
  U[        :X  a  SnOSn[        XB-   S5      U-  n[        X5      $ XPl        UR                  U5      (       a!  [        SU R                  U R                  5      e[        XU R                  5      $ )z!Parses a numeric escape sequence.rO       rX   rm  )parse_octal_escaper3   r   r.  r  r  r   r   r   r   r  r   ro  r&   r   r   )	r   r   r   r   r7  r   encoding
octal_maskrf   s	            r>   r  r    s    s!&f== F

I	B	V|JJ	ZZ\Fj 0zzN2H5 H$6!
"
Q'*4E!$.. J&!!3V]]FJJOO$

33r@   c                 B   U R                   nU R                  5       n[        U5      S:  aR  U[        ;   aH  UR	                  U5        U R                   nU R                  5       n[        U5      S:  a  U[        ;   a  MH  X@l          [        SR                  U5      S5      n[        XU5      $ ! [         ah    US   [        ;   a3  [        SSR                  U5      -  U R                  U R                   5      e[        SUS   -  U R                  U R                   5      ef = f)z Parses an octal escape sequence.   ro   rX   r   zincomplete escape \%sr  )r3   r   re   r  rb   r  rd   r   r6  r&   r   )r   r   r7  r   r   r   rf   s          r>   r  r    s    

I	B
f+/bJ.bJJ	ZZ\ f+/bJ.
 J	BGGFOQ'd622 !9
"02776?BmmVZZ) ) )F1I5v}}jj s   &B, ,A2Dc                    U R                   n/ n[        U5       H[  nU R                  5       n	U	[        ;  a-  [	        SU< SR                  U5      < 3U R                  U5      eUR                  U	5        M]      [        SR                  U5      S5      n
U
S:  a  [        XU5      $  [	        SU< SR                  U5      < 3U R                  U5      e! [         a     N9f = f)zParses a hex escape sequence.incomplete escape \ro   rY   i   zbad hex escape \)r3   ranger   r  r&   rd   r   rb   r  r   r6  )r   r   escexpected_lenr   typer   r7  rx   r   rf   s              r>   r  r  "  s    

IF< ZZ\ZdBGGFOLmmY( (b !7BGGFOR( 8!$v66  3@mmY     s   :C 
C"!C"c                     U R                  S5        U R                  n[        U S5      nU R                  S5        UR                  U5      (       a!  [	        SU R
                  U R                  5      e[        XU5      $ )zParses a group reference.r;  TrL  rm  )rX  r3   rV  ro  r&   r   r   )r   r   r   r   s       r>   r  r  9  se    
MM#

Ifd#D
MM#$3V]]FJJOO$i00r@   c                     U R                  S5        [        U S5      nU R                  S5        Ub  X!R                  ;  a!  [        SU R                  U R
                  5      e[        X5      $ )zParses a string set reference.r;  TrL  zundefined named list)rX  rV  kwargsr&   r   r3   r   )r   r   r   s      r>   r  r  D  sW    
MM#fd#D
MM#|t;;.*FMM6::FF4&&r@   c                    U R                   nU R                  S5      (       aW  U R                  [        SS9nU R                  S5      (       a-   [        R
                  " U5      n[        U[        U5      U5      $ X0l         [        U[        S5      U5      $ ! [         a"    [        SU R                  U R                   5      ef = f)zParses a named character.r  T)keep_spacesr  undefined character namer  )r3   r   rG  NAMED_CHAR_PARTunicodedatalookupr   r   r   r&   r   )r   r   r   r   r   rf   s         r>   r  r  N  s    

I||CTB<<#**40%dCJ??
 J$C&11  6** s   +B ,Cc                    U R                   nU R                  5       nUS:X  aP  U R                  S5      n[        U 5      u  pxU R                  S5      (       a  [	        XxX&:g  U 5      n	[        XU5      $ O&U(       a  US;   a  [	        SXRU 5      n	[        XU5      $ X@l         U(       a  SOSn[        U[        U5      U5      $ )zParses a Unicode property.r  r   r  CLMNPSZNry   r   )r3   r   r   parse_property_namelookup_propertyr   r   r   )
r   r   r   r   r   r   negate	prop_namer   r   s
             r>   r  r  ^  s    

I	B	Syc"-f5	<<"9H4FOD V44  
itR6:T00 JcB$B00r@   c                 &   U R                  [        5      nU R                  nU R                  5       nU(       aO  US;   aI  UnU R                  [        [        S5      -  5      R                  5       nU(       a  U R                  nOSUpOSnX l        XA4$ )z/Parses a property name, which may be qualified.z:=z &_-./N)rG  PROPERTY_NAME_PARTr3   r   ALNUMr   strip)r   r   r   r   r  s        r>   r  r  s  s~    ./D

I	B	bDj	H 56<<>

I #It	J?r@   c                    UR                   [        -  =(       d    [        nU R                  nSU l        U R	                  S5      n U[
        :X  a  [        X5      nO[        X5      nU R	                  S5      (       d!  [        SU R                  U R                  5      e X0l        U(       a  UR                  UR                  (       + S9nUR                  [        U5      S9nU$ ! X0l        f = f)zParses a character set.Fr   ]	missing ]r   r   )r   _ALL_VERSIONSDEFAULT_VERSIONrY  r   r   parse_set_imp_unionparse_set_unionr&   r   r3   r   r   r   )r   r   versionr  r  r   s         r>   r   r     s    zzM)=oG&&LF\\#F	+h&v4D"60D||C  V]]FJJ?? ! +DMM(9:??od&;?<DK +s   AC$ $C,c                     [        X5      /nU R                  S5      (       a2  UR                  [        X5      5        U R                  S5      (       a  M2  [        U5      S:X  a  US   $ [	        X5      $ )zParses a set union ([x||y]).rp   r.   r   )parse_set_symm_diffr   rb   re   r   r   r   itemss      r>   r  r    sb     ./E
,,t

(67 ,,t

 5zQQxD  r@   c                     [        X5      /nU R                  S5      (       a2  UR                  [        X5      5        U R                  S5      (       a  M2  [        U5      S:X  a  US   $ [	        X5      $ )z+Parses a set symmetric difference ([x~~y]).rq   r.   r   )parse_set_interr   rb   re   
SetSymDiffr  s      r>   r  r    sa    V*+E
,,t

_V23 ,,t

 5zQQxd""r@   c                     [        X5      /nU R                  S5      (       a2  UR                  [        X5      5        U R                  S5      (       a  M2  [        U5      S:X  a  US   $ [	        X5      $ )z#Parses a set intersection ([x&&y]).rr   r.   r   )parse_set_diffr   rb   re   SetInterr  s      r>   r  r    sa    F)*E
,,t

^F12 ,,t

 5zQQxD  r@   c                     [        X5      /nU R                  S5      (       a2  UR                  [        X5      5        U R                  S5      (       a  M2  [        U5      S:X  a  US   $ [	        X5      $ )z!Parses a set difference ([x--y]).rs   r.   r   )r  r   rb   re   SetDiffr  s      r>   r  r    sb     ./E
,,t

(67 ,,t

 5zQQx4r@   c                   ^  UR                   [        -  =(       d    [        n[        T U5      /n T R                  nT R                  S5      (       a  UT l        OMU[        :X  a&  [        U 4S j[         5       5      (       a  UT l        OUR                  [        T U5      5        Mw  [        U5      S:X  a  US   $ [        X5      $ )z#Parses a set implicit union ([xy]).r  c              3   F   >#    U  H  nTR                  U5      v   M     g 7fr  r<  )r  opr   s     r>   r  &parse_set_imp_union.<locals>.<genexpr>  s     &J'Bv||B'7'7's   !r.   r   )r   r  r  parse_set_memberr3   r   r!   anySET_OPSrb   re   r   )r   r   r  r  r   s   `    r>   r  r    s    zzM)=oGfd+,E
JJ	<<"FJh3&J'&J#J#J"FJ%fd34  5zQQxD  r@   c           	      Z   [        X5      nU R                  n[        U[        5      (       a'  UR                  (       a  U R                  S5      (       d  U$ UR                  [        -  =(       d    [        nU R                  nU[        :X  a  U R                  S5      (       a  X0l        U$ U R                  S5      (       a%  XPl        [        X[        [        S5      5      /5      $ [        X5      n[        U[        5      (       a  UR                  (       d   [        X[        [        S5      5      U/5      $ UR                  UR                  :  a!  [        SU R                  U R                  5      eUR                  UR                  :X  a  U$ [        UR                  UR                  5      $ )z#Parses a member in a character set.r  r  zbad character range)parse_set_itemr3   r/   r   r   r   r   r  r  r!   r   r   rf   r&   r   Range)r   r   start
saved_pos1r  
saved_pos2ends          r>   r
  r
    s;    6(EJui((ll3zzM)=oG J(v||C00  
||C  
iC&9:;; 
&Cc9%%S\\iC&93?@@ {{SYY)6==&**EE{{ciicii((r@   c                    UR                   [        -  =(       d    [        nU R                  S5      (       a  [	        XS5      $ U R
                  nU R                  S5      (       a   [        X5      $ U[        :X  a  U R                  S5      (       az  U R                  S5      n[        X5      nU R                  S5      (       d!  [        SU R                  U R
                  5      eU(       a  UR                  UR                  (       + S9nU$ U R                  5       nU(       d!  [        S	U R                  U R
                  5      e[        [!        U5      5      $ ! [         a	    X0l         Nf = f)
z"Parses an item in a character set.r   Tz[:r   r   r  r  r  zunterminated character set)r   r  r  r   r   r3   parse_posix_classrN   r!   r  r&   r   r   r   r   r   r   )r   r   r  r   r  r   r   s          r>   r  r    s   zzM)=oG||DF$//

I||D	#$V22
 (v||C00 c"v,||C  V]]FJJ????,=?>D	B0&--LLSW/  	#"J	#s   &
E E*)E*c                     U R                  S5      n[        U 5      u  p4U R                  S5      (       d
  [        5       e[        X4U(       + U SS9$ )zParses a POSIX character class.r   z:]T)posix)r   r  rN   r  )r   r   r  r  r   s        r>   r  r  1  sF    \\#F)&1OI<<l9JdKKr@   c                 x    [        U 5      nX-
  n[        U5      S:  a  US4$ [        SU-  5      u  p4X-  U-   U4$ )z$Converts a float to a rational pair.g-C6?r.   g      ?)r  absfloat_to_rational)fltint_partr&   dennums        r>   r  r  :  sJ    3xHNE
5zF{ u-HC>C$$r@   c                    U SS S:X  a
  U S   U SS pOSnU R                  S5      n[        U5      S:X  a)  [        [        US   5      [        US   5      -  5      u  p4O3[        U5      S:X  a  [        [        US   5      5      u  p4O
[	        5       eSR                  XU5      nUR                  S	5      (       a  USS
 $ U$ )z<Converts a numeric string to a rational string, if possible.Nr.   r  r   ro   /rV   z{}{}/{}z/1)splitre   r  floatr6  r8   endswith)numericsignpartsr  r  results         r>   numeric_to_rationalr)  E  s    !}
GACMgMM#E
5zQ$U58_uU1X%FGS	Uq$U58_5Sld-Ftt}Mr@   c                      [        SR                  U 5      5      $ ! [        [        4 a)    SR                  S U  5       5      R	                  5       s $ f = f)z&Standardises a property or value name.ro   c              3   4   #    U  H  oS ;  d  M
  Uv   M     g7f)z_- NrG   r  s     r>   r  #standardise_name.<locals>.<genexpr>_  s     <DbeOrrDs   		)r)  rd   r6  ZeroDivisionErrorupper)r   s    r>   standardise_namer/  Z  sP    E"2774=11)* Eww<D<<BBDDEs    6AAzALNUM DIGIT PUNCT XDIGITzYES Y NO N TRUE T FALSE Fc                 2   U (       a  [        U 5      OSn [        U5      nX4S:X  a
  SSU(       + p!n U(       a$  U (       d  UR                  5       [        ;   a  SU-   nU (       a  [        R	                  U 5      nU(       d3  U(       d  [        S5      e[        SUR                  UR                  5      eUu  pgUR	                  U5      nUc3  U(       d  [        S5      e[        SUR                  UR                  5      e[        US-  U-  U5      $ S	 HB  n [        R	                  U 5      u  pgUR	                  U5      nUc  M0  [        US-  U-  U5      s  $    [        R	                  U5      nU(       a=  Uu  pg[        U5      [        :X  a  [        US-  S
-  U5      $ [        US-  U(       + 5      $ UR                  S5      (       a;  [        R	                  USS 5      nU(       a  Uu  pgSU;   a  [        US-  S
-  U5      $ S H_  u  pUR                  U	5      (       d  M  [        R	                  U 5      u  pgUR	                  USS 5      nUc  MM  [        US-  U-  U5      s  $    U(       d  [        S5      e[        SUR                  UR                  5      e)zLooks up a property.N)GENERALCATEGORYASSIGNEDr1  
UNASSIGNEDr   zunknown propertyzunknown property valuerY   )GCSCRIPTBLOCKr.   ISrV   YES))r7  r5  )INr6  )r/  r.  _POSIX_CLASSES
PROPERTIESr   r&   r   r3   Propertyr   _BINARY_VALUES
startswith)
propertyrf   r   r   r  r   prop_id
value_dictval_idprefixs
             r>   r  r  e  sW    .6)4HU#E;;$5|\X%++->"A%~~h'.//*FMM6::FF"&>4550&--LLB&0(;; .(nnX6&W]f4h??	 . >>% D"z?n,W]a/::28|44 ~~eACk*"&G
"B! 3X>> @F##",..":G^^E!#K0F!B& 8(CC @ &''
"FMM6::
>>r@   c                    U R                  5       nU[        ;   a  [        R                  U5      nU(       a  S[        U5      /4$ U[        ;   a$  US:X  d  U(       a  S[        U [        U   U5      /4$ US:X  a  S[        X5      /4$ US:X  a  U(       a  [        U 5      nUb  SU/4$ [        SU-  U R                  U R                  5      e[        U R                  [        5      (       a  SnOSnUS	:X  ae  Un[        U5      S
:  aB  U R                  nU R                  5       nU[        ;  a  Xpl
        OXc-  n[        U5      S
:  a  MB  S[!        US5      U-  /4$ U["        ;   a  UnU R                  nU R                  5       nU["        ;   aM  Xc-  nU R                  nU R                  5       nU(       a&  [%        Xc-   5      (       a  S[!        Xc-   S5      U-  /4$ Xpl
        S[!        U5      /4$ US:X  a  S[        S5      /4$ U(       d!  [        SU R                  U R                  5      eS[        S5      [        U5      /4$ )z0Compiles a replacement template escape sequence.Fr~   r  Tr  r  r  r  rO  r  rX   r   r  )r   r*  r  r   r  parse_repl_hex_escapecompile_repl_groupparse_repl_named_charr&   r   r3   r/   sepbytesre   r  r  r.  r  )r   r2   
is_unicoder   rf   r  r7  r   s           r>   _compile_replacementrK    s   	B	U{!%%b)3u:,&&")z0R"MNNN9,V=>>>9)&1E ug~%%*FMM6::FF&**e$$

	Sy&kAo

IB#&
LF &kAo s61~
2333	V| JJ	ZZ\<LF

IBhv{++s6;2Z?@@@ 
c&k]""	Tzs4yk!!16==&**MM 3t9c"g&&&r@   c                 $   / n[        U5       He  nU R                  5       nU[        ;  a7  [        SU< SR	                  U5      < 3U R
                  U R                  5      eUR                  U5        Mg     [        SR	                  U5      S5      $ )z5Parses a hex escape sequence in a replacement string.r  ro   rY   )	r  r   r  r&   rd   r   r3   rb   r  )r   r  r  r7  rx   r   s         r>   rE  rE    su    F< ZZ\ZdBGGFOLmmVZZ) )b ! rwwv##r@   c                 d   U R                   nU R                  S5      (       aY  U R                  [        [	        S5      -  5      nU R                  S5      (       a"   [
        R                  " U5      n[        U5      $ Xl         g! [         a"    [        SU R                  U R                   5      ef = f)z1Parses a named character in a replacement string.r   r  r  N)r3   r   rG  r*  r   r  r  r   r   r&   r   )r   r   r   rf   s       r>   rG  rG    s    

I||CC 01<<#**405z!
 J  6** s    B ,B/c                 j   U R                  S5        [        U SS5      nU R                  S5        UR                  5       (       aG  [        U5      nSUs=::  a  UR                  ::  d#  O  [        SU R                  U R                  5      eU$  UR                  U   $ ! [         a    [        S5      ef = f)z0Compiles a replacement template group reference.r;  TrL  r   invalid group referenceunknown group)rX  rV  r  r  groupsr&   r   r3   
groupindexr   
IndexError)r   r2   r   indexs       r>   rF  rF    s    
MM#fdD)D
MM#||~~D	E+W^^+16==&**MM*!!$'' *))*s   B B2z  rY   z	NON-MATCHMATCHFTz SIMPLE_IGNORE_CASEz FULL_IGNORE_CASEc                 @    [        U 5      S:X  a  U S   $ [        U 5      $ Nr.   r   )re   r   r  s    r>   make_sequencer[  0  s     
5zQQxE?r@   c                       \ rS rSrS rSS jrS rS rS rS r	S	 r
S
 rS rS rS rSS jrS rS rS rS rS rSrg)	RegexBasei6  c                 &    U R                   U l        g r  )ra   _keyr;   s    r>   r:   RegexBase.__init__7  s    NN	r@   Nc                 0   Uc  U R                   nO[        U5      nUc  U R                  nO[        U[        -     nUc  U R
                  nO[        U5      nXR                   :X  a   X R                  :X  a  X0R
                  :X  a  U $ U R                  XU5      $ r  )r   r   r   CASE_FLAGS_COMBINATIONSr   r   rebuildr;   r   r   r   s       r>   r   RegexBase.with_flags:  s    }}HH~HJ0j1HIJIYI%**G
~~
%K||H)<<r@   c                     g r  rG   r;   r2   r   fuzzys       r>   
fix_groupsRegexBase.fix_groupsN  s    r@   c                     U $ r  rG   r;   r   r   s      r>   r   RegexBase.optimiseQ      r@   c                     U $ r  rG   r;   r   s     r>   pack_charactersRegexBase.pack_charactersT  ro  r@   c                     U $ r  rG   r`  s    r>   remove_capturesRegexBase.remove_capturesW  ro  r@   c                     gNTrG   r`  s    r>   	is_atomicRegexBase.is_atomicZ      r@   c                     grx  rG   r`  s    r>   can_be_affixRegexBase.can_be_affix]  r{  r@   c                     gNFrG   r`  s    r>   contains_groupRegexBase.contains_group`      r@   c                     [        5       er  )rQ   r;   r   s     r>   get_firstsetRegexBase.get_firstsetc  s    r@   c                     gr  rG   r`  s    r>   has_simple_startRegexBase.has_simple_startf  r  r@   c                 $    U R                  X5      $ r  )_compiler;   r   ri  s      r>   r   RegexBase.compilei  s    }}W,,r@   c                     gr  rG   r`  s    r>   r  RegexBase.is_emptyl  r  r@   c                 ,    [        U R                  5      $ r  )hashr_  r`  s    r>   __hash__RegexBase.__hash__o  s    DIIr@   c                 n    [        U 5      [        U5      L =(       a    U R                  UR                  :H  $ r  )r  r_  r;   others     r>   __eq__RegexBase.__eq__r  s'    DzT%[(DTYY%**-DDr@   c                 .    U R                  U5      (       + $ r  )r  r  s     r>   __ne__RegexBase.__ne__u  s    ;;u%%%r@   c                 &    U R                  5       S 4$ r  	max_widthr  s     r>   get_required_stringRegexBase.get_required_stringx      ~~%%r@   )r_  )NNNFF)rA   rB   rC   rD   r:   r   rj  r   rr  ru  ry  r}  r  r  r  r   r  r  r  r  r  rF   rG   r@   r>   r]  r]  6  sX    #=(-E&&r@   r]  c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
ZeroWidthBasei|  c                     [         R                  U 5        [        U5      U l        U R                  U R                  4U l        g r  )r]  r:   r   r   ra   r_  )r;   r   s     r>   r:   ZeroWidthBase.__init__}  s/    4 XNNDMM1	r@   c                     [        S /5      $ r  r   r  s     r>   r  ZeroWidthBase.get_firstset      D6{r@   c                     SnU R                   (       a	  U[        -  nU(       a	  U[        -  nU(       a	  U[        -  nU R                  U4/$ Nr   )r   POSITIVE_OPFUZZY_OP
REVERSE_OP_opcoder;   r   ri  r   s       r>   r  ZeroWidthBase._compile  sD    ==[ EXEZEu%&&r@   c                     [        SR                  [        U-  U R                  [        U R
                     5      5        g )Nz{}{} {})printr8   INDENT_op_namePOS_TEXTr   r;   indentr   s      r>   dumpZeroWidthBase.dump  s/    iv
4==
!# 	$r@   c                     gr  rG   r`  s    r>   r  ZeroWidthBase.max_width      r@   )r_  r   NT)
rA   rB   rC   rD   r:   r  r  r  r  rF   rG   r@   r>   r  r  |  s    2'$r@   r  c                   b    \ rS rSr\R
                  \R                  S.rSrS r	S r
S rS rSrg	)
r   i  rW  ANYc                     grx  rG   r`  s    r>   r  Any.has_simple_start  r{  r@   c                 J    SnU(       a	  U[         -  nU R                  U   U4/$ r  )r  r  r  s       r>   r  Any._compile  s+    XEg&.//r@   c                 \    [        SR                  [        U-  U R                  5      5        g )N{}{})r  r8   r  r  r  s      r>   r  Any.dump  s    fmmFVOT]];<r@   c                     gNr.   rG   r`  s    r>   r  Any.max_width  r  r@   rG   N)rA   rB   rC   rD   OPr  ANY_REVr  r  r  r  r  r  rF   rG   r@   r>   r   r     s-    ffBJJ/GH0=r@   r   c                   J    \ rS rSr\R
                  \R                  S.rSrSr	g)r   i  rW  ANY_ALLrG   N)
rA   rB   rC   rD   r  r  ANY_ALL_REVr  r  rF   rG   r@   r>   r   r     s    jj7GHr@   r   c                   J    \ rS rSr\R
                  \R                  S.rSrSr	g)r   i  rW  ANY_UrG   N)
rA   rB   rC   rD   r  r  	ANY_U_REVr  r  rF   rG   r@   r>   r   r     s    hhbll3GHr@   r   c                   n    \ 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)r|  i  c                 :    [         R                  U 5        Xl        g r  )r]  r:   r  )r;   r  s     r>   r:   Atomic.__init__  s    4 $r@   c                 <    U R                   R                  XU5        g r  r  rj  rh  s       r>   rj  Atomic.fix_groups      ""7U;r@   c                     U R                   R                  X5      U l         U R                   R                  5       (       a  U R                   $ U $ r  )r  r   r  rm  s      r>   r   Atomic.optimise  s:    //224A??##%%??"r@   c                 F    U R                   R                  U5      U l         U $ r  r  rr  rq  s     r>   rr  Atomic.pack_characters      //99$?r@   c                 D    U R                   R                  5       U l         U $ r  r  ru  r`  s    r>   ru  Atomic.remove_captures      //99;r@   c                 6    U R                   R                  5       $ r  r  r}  r`  s    r>   r}  Atomic.can_be_affix      ++--r@   c                 6    U R                   R                  5       $ r  r  r  r`  s    r>   r  Atomic.contains_group      --//r@   c                 8    U R                   R                  U5      $ r  r  r  r  s     r>   r  Atomic.get_firstset      ++G44r@   c                 6    U R                   R                  5       $ r  r  r  r`  s    r>   r  Atomic.has_simple_start      //11r@   c                     [         R                  4/U R                  R                  X5      -   [         R                  4/-   $ r  )r  ATOMICr  r   ENDr  s      r>   r  Atomic._compile  s6    ))$//"9"9'"IIFF:, 	r@   c                     [        SR                  [        U-  5      5        U R                  R	                  US-   U5        g )N{}ATOMICr.   )r  r8   r  r  r  r  s      r>   r  Atomic.dump  s1    j01VaZ1r@   c                 6    U R                   R                  5       $ r  r  r  r`  s    r>   r  Atomic.is_empty      ''))r@   c                 n    [        U 5      [        U5      L =(       a    U R                  UR                  :H  $ r  )r  r  r  s     r>   r  Atomic.__eq__  s0    T
d5k) doo


/ 	r@   c                 6    U R                   R                  5       $ r  r  r  r`  s    r>   r  Atomic.max_width      ((**r@   c                 8    U R                   R                  U5      $ r  r  r  r  s     r>   r  Atomic.get_required_string      227;;r@   )r  N)rA   rB   rC   rD   r:   rj  r   rr  ru  r}  r  r  r  r  r  r  r  r  r  rF   rG   r@   r>   r|  r|    sM    %<.0522*+<r@   r|  c                   0    \ rS rSr\R
                  rSrSrg)Boundaryi  BOUNDARYrG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r  r    s    kkGHr@   r  c                   .   \ 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 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rS rS rS rSr g)r   i  c                 :    [         R                  U 5        Xl        g r  )r]  r:   r   )r;   r   s     r>   r:   Branch.__init__  s    4  r@   c                 N    U R                    H  nUR                  XU5        M     g r  )r   rj  )r;   r2   r   ri  ru   s        r>   rj  Branch.fix_groups  s    ALL51 r@   c                    U R                   (       d  [        / 5      $ [        R                  XU R                   5      nU(       a  [        R	                  X5      u  pC/ nO[        R                  X5      u  pS/ n[        R                  XU5      n[        U5      S:  a_  [        U5      /nU(       a  U(       dD  U R                  XU5      nU(       a+  U(       a  UR                  U5        OUR                  SU5        OUn[        XV-   U-   5      $ rY  )r   r   r   _flatten_branches_split_common_suffix_split_common_prefix_reduce_to_setre   _add_precheckrb   insertr[  )r;   r   r   r   suffixrC  r   firstsets           r>   r   Branch.optimise  s    }}B< ++D4==I %::4JFF%::4JFF ((Ax=1x()H--dXF 1 84HV.788r@   c           
      0   [        5       nU(       a  SOSnU HI  n[        U5      [        L a4  UR                  [        :X  a   UR                  UR                  U   5        MI    g    U(       d  g [        XU Vs/ s H  n[        U5      PM     sn5      $ s  snf Nr   )	r   r  Literalr   r   r   
charactersr   r   )r;   r   r   r   r  r3   branchr   s           r>   r  Branch._add_precheck  sz    %bFF|w&6+<+<+FF--c23	  tW.MWy|W.MNN.Ms   7Bc                 p    U R                    Vs/ s H  o"R                  U5      PM     snU l         U $ s  snf r  )r   rr  )r;   r   ru   s      r>   rr  Branch.pack_characters)  s0    :>--H-Q**40-H Is   3c                 n    U R                    Vs/ s H  oR                  5       PM     snU l         U $ s  snf r  )r   ru  )r;   ru   s     r>   ru  Branch.remove_captures-  s.    6:mmDm**,mD E   2c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  ry  r  ru   s     r>   r  #Branch.is_atomic.<locals>.<genexpr>2       8-Q;;==-   r  r   r`  s    r>   ry  Branch.is_atomic1      8$--888r@   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  )r}  r,  s     r>   r  &Branch.can_be_affix.<locals>.<genexpr>5  s     ;]>>##]r/  r0  r`  s    r>   r}  Branch.can_be_affix4  s    ;T]];;;r@   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  r,  s     r>   r  (Branch.contains_group.<locals>.<genexpr>8  s     =}!##%%}r/  )r  r   r`  s    r>   r  Branch.contains_group7  s    =t}}===r@   c                     [        5       nU R                   H  nX#R                  U5      -  nM     U=(       d    [        S /5      $ r  )r   r   r  )r;   r   r   ru   s       r>   r  Branch.get_firstset:  s;    UA..))B   S$[ r@   c                    U R                   (       d  / $ [        R                  4/nU R                    HC  nUR                  UR	                  X5      5        UR                  [        R                  45        ME     [        R                  4US'   U$ Nr  )r   r  BRANCHr   r   rb   NEXTr  )r;   r   ri  r   ru   s        r>   r  Branch._compileA  sf    }}IAKK		'12KK$  FF:Rr@   c                 "   [        SR                  [        U-  5      5        U R                  S   R	                  US-   U5        U R                  SS   H9  n[        SR                  [        U-  5      5        UR	                  US-   U5        M;     g )Nz{}BRANCHr   r.   {}OR)r  r8   r  r   r  )r;   r  r   ru   s       r>   r  Branch.dumpN  sr    j01afqj'2qs$A&--01FF6A:w' %r@   c                     / nU HW  nUR                  X5      n[        U[        5      (       a  UR                  UR                  5        MF  UR                  U5        MY     U$ r  )r   r/   r   r   r   rb   )r   r   r   new_branchesru   s        r>   r  Branch._flatten_branchesU  sV     A

4)A!V$$##AJJ/##A&  r@   c                   ^^	^
 / nU HG  n[        U[        5      (       a  UR                  UR                  5        M5  UR                  U/5        MI     [	        S U 5       5      nUS   m
Sm	UnT	U:  as  T
T	   R                  5       (       a[  [        U	U
4S jU 5       5      (       a@  T	S-  m	T	U:  a5  T
T	   R                  5       (       a  [        U	U
4S jU 5       5      (       a  M@  T	mU R                  [        -  (       aI  T	mTS:  aA  [        U4S jU 5       5      (       d'  TS-  mTS:  a  [        U4S jU 5       5      (       d  M'  TS:X  a  / U4$ / nU H   nUR                  [        UTS  5      5        M"     T
S T U4$ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr  re   r  rt   s     r>   r  .Branch._split_common_prefix.<locals>.<genexpr>n       51A   r   c              3   :   >#    U  H  nUT   TT   :H  v   M     g 7fr  rG   )r  rt   r3   rC  s     r>   r  rM  t  ,      C-+! DES6
+D+   r.   c              3   P   >#    U  H  n[         R                  UT5      v   M     g 7fr  )r   
_can_splitr  rt   r4   s     r>   r  rM  }  s*      ( IJ(9(9!U(C(C   #&
r/   r   rb   r  minr}  r  r   r   r[  )r   r   alternativesru   r	  end_posrG  rt   r4   r3   rC  s           @@@r>   r  Branch._split_common_prefixb  s    A!X&&##AGG,##QC(	  555	 aGms 8 8 : :s C-+C- @- @-1HC Gms 8 8 : :s C-+C- @- @- :: E!)C (( % %
 !)C (( % %
 A:x< Aak :;  w--r@   c                   ^^	^
 / nU HG  n[        U[        5      (       a  UR                  UR                  5        M5  UR                  U/5        MI     [	        S U 5       5      nUS   m
Sm	SU-
  nT	U:  as  T
T	   R                  5       (       a[  [        U	U
4S jU 5       5      (       a@  T	S-  m	T	U:  a5  T
T	   R                  5       (       a  [        U	U
4S jU 5       5      (       a  M@  ST	-
  mU R                  [        -  (       aG  TS:  aA  [        U4S jU 5       5      (       d'  TS-  mTS:  a  [        U4S jU 5       5      (       d  M'  TS:X  a  / U4$ / nU H!  nUR                  [        US T*  5      5        M#     T
T* S  U4$ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr  rK  rL  s     r>   r  .Branch._split_common_suffix.<locals>.<genexpr>  rN  rO  r   r  c              3   :   >#    U  H  nUT   TT   :H  v   M     g 7fr  rG   )r  rt   r3   r  s     r>   r  r^    rQ  rR  r.   c              3   P   >#    U  H  n[         R                  UT5      v   M     g 7fr  )r   _can_split_revrU  s     r>   r  r^    s*      ( MN(=(=a(G(GrV  rW  )r   r   rY  ru   r	  rZ  rG  rt   r4   r3   r  s           @@@r>   r  Branch._split_common_suffix  s    A!X&&##AGG,##QC(	  555	 ay.Gms 8 8 : :s C-+C- @- @-1HC Gms 8 8 : :s C-+C- @- @- S:: !)C (( % %
 !)C (( % %
 A:x< AaE6l ;<  ufh ,..r@   c                    [         R                  XS-
  5      (       d  g[         R                  X5      (       d  g[         R                  XS-
  US-    5      (       a  g[         R                  XS-   5      (       a#  [         R                  XS-
  US-    5      (       a  g[         R                  XS-
  5      (       a#  [         R                  XS-
  US-    5      (       a  gg)Nr.   TFrV   )r   _is_full_case
_is_folded)r  r4   s     r>   rT  Branch._can_split  s     ##E1955##E11 U19uqy9::   	22


E!)eai8
9
9   	22


E!)eai8
9
9r@   c                    [        U 5      n[        R                  XU-
  5      (       d  g[        R                  XU-
  S-
  5      (       d  g[        R                  XU-
  S-
  X!-
  S-    5      (       a  g[        R                  XU-
  S-   5      (       a(  [        R                  XU-
  S-
  X!-
  S-    5      (       a  g[        R                  XU-
  S-
  5      (       a(  [        R                  XU-
  S-
  X!-
  S-    5      (       a  gg)NTr.   FrV   )re   r   rd  re  )r  r4   r  s      r>   ra  Branch._can_split_rev  s    %j ##E;77##E;?;; U;?S[1_EFF   ea88


E+/CK!OD
E
E   ea88


E+/CK!OD
E
Er@   c                    [        [        5      n0 n/ nU GHA  n[        R                  U5      (       aE  X6R                     R                  U/5        UR                  UR                  [        U5      5        Mc  [        U[        5      (       a  UR                  (       a  [        R                  UR                  S   5      (       ai  X6R                  S   R                     R                  UR                  5        UR                  UR                  S   R                  [        U5      5        GM  [        R                  XX4U5        UR                  U5        GMD     [        R                  XXE5        U$ r  )r   r   r   _is_simple_characterrf   rb   
setdefaultre   r/   r   r  _flush_char_prefix)r   r   r   prefixedorderrG  ru   s          r>   _merge_common_prefixesBranch._merge_common_prefixes  s   
 t$A**1--!((!-  #e*5Q))agg))!''!*55))*11!'':  !1!13u:>))$  ##A&   	!!$%Fr@   c                 x    [        U [        5      =(       a$    U R                  =(       a    U R                  (       + $ r  )r/   r   r   r   r   s    r>   rj  Branch._is_simple_character	  s$    !Y'KAJJKq||;KKr@   c                    / n[        5       n[        nU H  n[        U[        [        [
        45      (       aW  UR                  U:w  a#  [        R                  XXEU5        UR                  nUR                  UR                  [        S95        Mz  [        R                  XXEU5        UR                  U5        M     [        R                  XXEU5        U$ Nr   )r   r   r/   r   r<  SetBaser   r   _flush_set_membersr   r   rb   )r   r   r   rG  r  r   ru   s          r>   r  Branch._reduce_to_set		  s     
A!i7;<<<<:---dU"$ "#J		!,,&,9:))$  ##A& " 	!!$
	 r@   c           	      8  ^ U(       d  g [        UR                  5       U4S jS9 H  u  pV[        U5      S:X  a  UR                  [	        US   5      5        M3  / nSnU HU  n	[        U	5      S:  a  UR                  [	        U	SS  5      5        M1  U(       a  M:  UR                  [        5       5        SnMW     [        [        U5      [        U5      /5      n
UR                  U
R                  X5      5        M     UR                  5         TR                  5         g )Nc                    > TU S      $ r  rG   )pairrn  s    r>   <lambda>+Branch._flush_char_prefix.<locals>.<lambda>+	  s    
Q.r@   keyr.   r   FT)
sortedr  re   rb   r[  r   r   r   r   r   )r   r   rm  rn  rG  rf   r   subbranchesoptionalru   r   s      `       r>   rl  Branch._flush_char_prefix%	  s     %hnn&6 =  OE8}!##M(1+$>?  !A1vz#**=13+AB%X#**8:6#' " $Yu%5vk7J$KL##H$5$5d$DE " 	r@   c                     U(       d  g [        U5      S:X  a  [        U5      S   nO$[        U [        U5      5      R                  X5      nUR	                  UR                  US95        UR                  5         g )Nr.   r   r   )re   r   r   r   rb   r   r   )r   r   r  r   rG  r   s         r>   rw  Branch._flush_set_members?	  s_     u:?;q>DD$u+.77FDDOOzOBCr@   c                     SUs=::  a  [        U 5      :  d   g  gX   n[        U[        5      =(       a-    UR                  =(       a    UR                  [
        -  [
        :H  $ )Nr   F)re   r/   r   r   r   FULLIGNORECASE)r  rx   r   s      r>   rd  Branch._is_full_caseN	  sV    A"E
" #x4+ ? ???^+
>	@r@   c                    [        U 5      S:  a  gU  H<  n[        U[        5      (       a$  UR                  (       a  UR                  (       a  M<    g   SR                  S U  5       5      n[        R                  " [        U5      n[        R                  " 5       nU H$  nU[        R                  " [        U5      :X  d  M$    g   g)NrV   Fro   c              3   L   #    U  H  n[        UR                  5      v   M     g 7fr  )chrrf   r  rx   s     r>   r  $Branch._is_folded.<locals>.<genexpr>a	  s     5u!QWWus   "$T)
re   r/   r   r   r   rd   r   r   FULL_CASE_FOLDINGget_expand_on_folding)r  rx   foldedexpanding_charsr   s        r>   re  Branch._is_foldedW	  s    u:>Aq),,AJJlll 
 5u55!!"3V< !668 A))*;Q?? ! r@   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  r,  s     r>   r  "Branch.is_empty.<locals>.<genexpr>n	  s     7A::<<r/  r0  r`  s    r>   r  Branch.is_emptym	  s    7777r@   c                 n    [        U 5      [        U5      L =(       a    U R                  UR                  :H  $ r  )r  r   r  s     r>   r  Branch.__eq__p	  s'    DzT%[(LT]]enn-LLr@   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  r,  s     r>   r  #Branch.max_width.<locals>.<genexpr>t	  r.  r/  )r@  r   r`  s    r>   r  Branch.max_widths	  r2  r@   )r   N)!rA   rB   rC   rD   r:   rj  r   r  rr  ru  ry  r}  r  r  r  r  staticmethodr  r  r  rT  ra  ro  rj  r  rl  rw  rd  re  r  r  r  rF   rG   r@   r>   r   r     sF   !2!9FO9<>!( 
 
 '. '.R &/ &/P  0  4  6 L L  6  2   @ @  *8M9r@   r   c                   D    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
rg)r  iv	  c                     [         R                  U 5        Xl        X l        X0l        U R
                  U R                  4U l        g r  )r]  r:   r   rg  r   ra   r_  )r;   r   rg  r   s       r>   r:   CallGroup.__init__w	  s3    4 	
 NNDJJ.	r@   c                     [        U R                  5      U l        SU R                  s=::  a  U R                  R                  ::  d  O  [        SXR                  5      eU R                  S:  a=  U R                  R                  U R                     S:  a  [        SXR                  5      eU R                  R                  R                  XU45        U R                  U R                  4U l        g ! [         aQ     U R                  R                  U R                     U l         GN! [
         a    [        SXR                  5      ef = ff = f)NrP  r   rQ  r.   zambiguous group reference)r  rg  r6  r   group_indexr   r&   r   r~  open_group_countgroup_callsrb   ra   r_  rh  s       r>   rj  CallGroup.fix_groups	  s   	OTZZDJ DJJ7$))"7"77--@@::>dii88DqH3WmmLL		$$dU%;<NNDJJ.	  	OO!YY224::>
 O5wNNO	Os   C1 1
E<(D''!EEc                 8    [        S[        U R                  5      eNzgroup reference not allowedr&   r2   r   r`  s    r>   ru  CallGroup.remove_captures	      17DMMJJr@   c                 <    [         R                  U R                  4/$ r  )r  
GROUP_CALLcall_refr  s      r>   r  CallGroup._compile	  s    .//r@   c                 \    [        SR                  [        U-  U R                  5      5        g )Nz{}GROUP_CALL {})r  r8   r  rg  r  s      r>   r  CallGroup.dump	  s     &&v

CDr@   c                 n    [        U 5      [        U5      L =(       a    U R                  UR                  :H  $ r  )r  rg  r  s     r>   r  CallGroup.__eq__	  '    DzT%[(FTZZ5;;-FFr@   c                     [         $ r  r  r`  s    r>   r  CallGroup.max_width	      r@   c                     S U l         g r  r   r`  s    r>   __del__CallGroup.__del__	  	    	r@   )r_  rg  r   r   N)rA   rB   rC   rD   r:   rj  ru  r  r  r  r  r  rF   rG   r@   r>   r  r  v	  s-    //&K0EGr@   r  c                        \ rS rSrS rS rSrg)CallRefi	  c                     Xl         X l        g r  )refparsed)r;   r  r  s      r>   r:   CallRef.__init__	  s    r@   c                     [         R                  U R                  4/U R                  R	                  UU5      -   [         R
                  4/-   $ r  )r  CALL_REFr  r  r  r  r  s      r>   r  CallRef._compile	  sE    ++txx()DKK,@,@
- VVJ<  	!r@   )r  r  NrA   rB   rC   rD   r:   r  rF   rG   r@   r>   r  r  	  s    !r@   r  c                   B   \ rS rSr\S4\R                  \S4\R                  \	S4\R                  \
S4\R                  \S4\R                  \S4\R                  \	S4\R                  \
S4\R                  0rS\S4S jrS rSS jrS rS rS	 rS
 rS rS rS rSrg)r   i	  FTc                    [         R                  U 5        Xl        [        U5      U l        [
        U   U l        [        U5      U l        U R                  (       aO  U R                  [        -  [        :X  a4  [        R                  " [        [        U R                  5      5      U l        O[        U R                  5      U l        U R                  U R                  U R                  U R                  U R                  4U l        g r  )r]  r:   rf   r   r   rc  r   r   r  r   r   r  r  r  ra   r_  r;   rf   r   r   r   s        r>   r:   Character.__init__	  s    4 
X1*=iMMt?
 **+<c$**oNDKdjj/DK^^TZZ
//4>>+	r@   c                 0    [        U R                  XU5      $ r  )r   rf   re  s       r>   rd  Character.rebuild	  s    X9EEr@   c                     U $ r  rG   r;   r   r   r   s       r>   r   Character.optimise	  ro  r@   c                     [        U /5      $ r  r  r  s     r>   r  Character.get_firstset	  r  r@   c                     grx  rG   r`  s    r>   r  Character.has_simple_start	  r{  r@   c                    SnU R                   (       a	  U[        -  nU R                  (       a	  U[        -  nU(       a	  U[        -  n[        U R                  U R                  U4   UU R                  /5      n[        U R                  5      S:  aC  [        U[        U R                   Vs/ s H  n[        U5      PM     snU R                  S9/5      nUR                  X5      $ s  snf )Nr   r.   r   )r   r  r   ZEROWIDTH_OPr  PrecompiledCoder  r   rf   re   r  r   r  r   r   )r;   r   ri  r   r   r   s         r>   r  Character._compile	  s    ==[ E>>\!EXET__g-E F
**   t{{a4(EAQ(E"* + ,D ||G++ )Fs   *C%c           	          [        [        U R                  5      5      R                  S5      n[	        SR                  [        U-  [        U R                     U[        U R                     5      5        g )Nbuz{}CHARACTER {} {}{})asciir  rf   lstripr  r8   r  r  r   	CASE_TEXTr   r;   r  r   displays       r>   r  Character.dump	  sV    DJJ(//5#**6F?
4==
!7Idoo,FH 	Ir@   c                 8    XR                   :H  U R                  :H  $ r  )rf   r   r;   r   s     r>   matchesCharacter.matches	  s    jj T]]22r@   c                 ,    [        U R                  5      $ r  )re   r  r`  s    r>   r  Character.max_width	  s    4;;r@   c                 p    U R                   (       d  g[        S U R                   5       5      U l        SU 4$ )Nr  c              3   8   #    U  H  n[        U5      v   M     g 7fr  r   r  r   s     r>   r  0Character.get_required_string.<locals>.<genexpr>	  s     &C{!s1vv{rO  r   )r   r   r  folded_charactersr  s     r>   r  Character.get_required_string	  s,    }}!&&Ct{{&C!C$wr@   )r_  r   r  r  r   rf   r   NF)rA   rB   rC   rD   r   r  	CHARACTERr   CHARACTER_IGNr   r  CHARACTER_REVCHARACTER_IGN_REVr  r:   rd  r   r  r  r  r  r  r  r  rF   rG   r@   r>   r   r   	  s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G (,+"F,&I
3 r@   r   c                   n    \ 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)rv  i	  c                 j    [         R                  U 5        Xl        X l        X0l        X@l        XPl        g r  )r]  r:   r   rg  yes_itemno_itemr   )r;   r   rg  r  r  r   s         r>   r:   Conditional.__init__	  s)    4 	
  r@   c                     [        U R                  5      U l        SU R                  s=::  a  U R                  R                  ::  d  O  [        SXR                  5      eU R                  R                  XU5        U R                  R                  XU5        g ! [         aj     U R                  R                  U R                     U l         N! [
         a1    U R                  S:X  a
  SU l          N[        SXR                  5      ef = ff = f)NDEFINEr   rQ  rP  )r  rg  r6  r   r  r   r&   r   r~  r  rj  r  rh  s       r>   rj  Conditional.fix_groups 
  s    	ITZZDJ DJJ7$))"7"7717MMJJ  59%8  		II!YY224::>
 I::) "#DJ--HHI		Is)   B 
D#(C!D.D1DDc                     U R                   R                  X5      nU R                  R                  X5      n[        XR                  X4U R
                  5      $ r  )r  r   r  rv  rg  r   )r;   r   r   r  r  s        r>   r   Conditional.optimise
  sA    ==))$8,,''64XNNr@   c                     U R                   R                  U5      U l         U R                  R                  U5      U l        U $ r  )r  rr  r  rq  s     r>   rr  Conditional.pack_characters
  s3    55d;||33D9r@   c                     U R                   R                  5       U l         U R                  R                  5       U l        g r  )r  ru  r  r`  s    r>   ru  Conditional.remove_captures
  s*    557||335r@   c                 x    U R                   R                  5       =(       a    U R                  R                  5       $ r  )r  ry  r  r`  s    r>   ry  Conditional.is_atomic#
  s'    }}&&(ET\\-C-C-EEr@   c                 x    U R                   R                  5       =(       a    U R                  R                  5       $ r  )r  r}  r  r`  s    r>   r}  Conditional.can_be_affix&
  s'    }}))+K0I0I0KKr@   c                 x    U R                   R                  5       =(       d    U R                  R                  5       $ r  )r  r  r  r`  s    r>   r  Conditional.contains_group)
  s'    }}++-N1L1L1NNr@   c                 p    U R                   R                  U5      U R                  R                  U5      -  $ r  )r  r  r  r  s     r>   r  Conditional.get_firstset,
  s0    **73
,,
#
#G
,- 	.r@   c                 z   [         R                  U R                  4/nUR                  U R                  R                  X5      5        U R                  R                  X5      nU(       a1  UR                  [         R                  45        UR                  U5        UR                  [         R                  45        U$ r  )
r  GROUP_EXISTSrg  r   r  r   r  rb   rA  r  r;   r   ri  r   add_codes        r>   r  Conditional._compile0
  s~    $**-.DMM))'9:<<''7KK$KK!RVVJr@   c                 Z   [        SR                  [        U-  U R                  5      5        U R                  R                  US-   U5        U R                  R                  5       (       dA  [        SR                  [        U-  5      5        U R                  R                  US-   U5        g g )Nz{}GROUP_EXISTS {}r.   rD  )r  r8   r  rg  r  r  r  r  r  s      r>   r  Conditional.dump<
  s}    !((&$**EF6A:w/||$$&&&--01LLfqj'2 'r@   c                 x    U R                   R                  5       =(       a    U R                  R                  5       $ r  )r  r  r  r`  s    r>   r  Conditional.is_emptyC
  s'    }}%%'CDLL,A,A,CCr@   c                     [        U 5      [        U5      L =(       aG    U R                  U R                  U R                  4UR                  UR                  UR                  4:H  $ r  )r  rg  r  r  r  s     r>   r  Conditional.__eq__F
  sR    DzT%[( Hdjj$--
,,.!KKG.H 	Hr@   c                 z    [        U R                  R                  5       U R                  R                  5       5      $ r  r@  r  r  r  r`  s    r>   r  Conditional.max_widthJ
  )    4==**,dll.D.D.FGGr@   c                     S U l         g r  r  r`  s    r>   r  Conditional.__del__M
  r  r@   )rg  r   r  r   r  N)rA   rB   rC   rD   r:   rj  r   rr  ru  ry  r}  r  r  r  r  r  r  r  r  rF   rG   r@   r>   rv  rv  	  sT    !9(O
6FLO.
3DHHr@   rv  c                   0    \ rS rSr\R
                  rSrSrg)DefaultBoundaryiP
  DEFAULT_BOUNDARYrG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r  r  P
  s    !!G!Hr@   r  c                   0    \ rS rSr\R
                  rSrSrg)DefaultEndOfWordiT
  DEFAULT_END_OF_WORDrG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r  r  T
  s    $$G$Hr@   r  c                   0    \ rS rSr\R
                  rSrSrg)DefaultStartOfWordiX
  DEFAULT_START_OF_WORDrG   N)	rA   rB   rC   rD   r  r!  r  r  rF   rG   r@   r>   r   r   X
  s    &&G&Hr@   r   c                   0    \ rS rSr\R
                  rSrSrg)r   i\
  END_OF_LINErG   N)	rA   rB   rC   rD   r  r#  r  r  rF   rG   r@   r>   r   r   \
      nnGHr@   r   c                   0    \ rS rSr\R
                  rSrSrg)r   i`
  END_OF_LINE_UrG   N)	rA   rB   rC   rD   r  r&  r  r  rF   rG   r@   r>   r   r   `
      GHr@   r   c                   0    \ rS rSr\R
                  rSrSrg)EndOfStringid
  END_OF_STRINGrG   N)	rA   rB   rC   rD   r  r*  r  r  rF   rG   r@   r>   r)  r)  d
  r'  r@   r)  c                   0    \ rS rSr\R
                  rSrSrg)r   ih
  END_OF_STRING_LINErG   N)	rA   rB   rC   rD   r  r,  r  r  rF   rG   r@   r>   r   r   h
  s    ##G#Hr@   r   c                   0    \ rS rSr\R
                  rSrSrg)r   il
  END_OF_STRING_LINE_UrG   N)	rA   rB   rC   rD   r  r.  r  r  rF   rG   r@   r>   r   r   l
  s    %%G%Hr@   r   c                   0    \ rS rSr\R
                  rSrSrg)	EndOfWordip
  END_OF_WORDrG   N)	rA   rB   rC   rD   r  r1  r  r  rF   rG   r@   r>   r0  r0  p
  r$  r@   r0  c                       \ rS rSrSrS rSrg)Failureit
  FAILUREc                 &    [         R                  4/$ r  )r  r4  r  s      r>   r  Failure._compilew
  s    r@   rG   NrA   rB   rC   rD   r  r  rF   rG   r@   r>   r3  r3  t
  s    H r@   r3  c                   `    \ rS rSrSS j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)r  iz
  Nc                    [         R                  U 5        Uc  0 nXl        X l        SU;   a%  S H  nX2S   ;   d  M  UR	                  US5        M!     [        U5      [        S5      -  (       a  S H  nUR	                  US5        M     OS H  nUR	                  US5        M     UR	                  SS5        SU;   a  S H  nUS   R	                  US5        M     g SSSUS   S   S.US'   g )	Nr?  rC  r  )r   r   rv   r   r.   )drx   r{   r@  )r]  r:   r  r   rk  r   )r;   r  r   rv   s       r>   r:   Fuzzy.__init__{
  s    4 K$& [ F++**1i8  {c%j(&&q&1  &&q)4  	sI. [ F#..q!4  )*#q!##Kr@   c                 <    U R                   R                  XS5        g rx  r  rh  s       r>   rj  Fuzzy.fix_groups
  s    ""7T:r@   c                 F    U R                   R                  U5      U l         U $ r  r  rq  s     r>   rr  Fuzzy.pack_characters
  r  r@   c                 D    U R                   R                  5       U l         U $ r  r  r`  s    r>   ru  Fuzzy.remove_captures
  r  r@   c                 6    U R                   R                  5       $ r  r  ry  r`  s    r>   ry  Fuzzy.is_atomic
  r  r@   c                 6    U R                   R                  5       $ r  r  r`  s    r>   r  Fuzzy.contains_group
  r  r@   c                 :   / nS HF  nU R                   U   nUR                  US   5        UR                  US   c  [        OUS   5        MH     S H$  nUR                  U R                   S   U   5        M&     U R                   S   S   nUR                  Uc  [        OU5        SnU(       a	  U[        -  nU R                   R	                  S5      nU(       au  [
        R                  U4[        U5      -   /UR                  US5      -   [
        R                  4/-   U R                  R                  US5      -   [
        R                  4/-   $ [
        R                  U4[        U5      -   /U R                  R                  US5      -   [
        R                  4/-   $ )	Ndiser   r.   rC  r?  r@  r"  T)r   rb   r  r  r   r  	FUZZY_EXTr   r   rA  r  r  FUZZY)r;   r   ri  	argumentsrv   vr   r"  s           r>   r  Fuzzy._compile
  s   	A  #AQqT"!A$,YAaDA  AT--f5a89  V$U+aiQ7ZE##F+llE*U9-==>ll7D)*.0ggZL9oo%%gt459;	{C D ((E"U9%556
//
!
!'4
0157VVI;? 	@r@   c                     U R                  5       nU(       a  SU-   n[        SR                  [        U-  U5      5        U R                  R                  US-   U5        g )NrN  z	{}FUZZY{}r.   )_constraints_to_stringr  r8   r  r  r  )r;   r  r   r   s       r>   r  
Fuzzy.dump
  sN    113+Kk  &+>?VaZ1r@   c                 6    U R                   R                  5       $ r  r  r`  s    r>   r  Fuzzy.is_empty
  r   r@   c                     [        U 5      [        U5      L =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ r  )r  r  r   r  s     r>   r  Fuzzy.__eq__
  sL    T
d5k) Edoo


/ E#//53D3DD	Fr@   c                     [         $ r  r  r`  s    r>   r  Fuzzy.max_width
  r  r@   c                    / nS Ha  nU R                   U   u  p4US:X  a  M  SnUS:  a  SR                  U5      nXR-  nUb  USR                  U5      -  nUR                  U5        Mc     / nS H=  nU R                   S   U   nUS:  d  M  UR                  SR                  Xr5      5        M?     U R                   S   S   nUb8  US:  a2  S	R                  S
R                  U5      U5      nUR                  U5        SR                  U5      $ )Nidsr   ro   z{}<=z<={}r?  r  r@  z{}<={}r  r  )r   r8   rb   rd   )	r;   r   r   rX  r@  conr?  rD  limits	            r>   rO  Fuzzy._constraints_to_string
  s   D''-HCaxCQwmmC(KCv}}S))s# " D$$V,T2EqyFMM%67 
   (/??388D>59Dt$xx$$r@   )r   r  r  )rA   rB   rC   rD   r:   rj  rr  ru  ry  r  r  r  r  r  r  rO  rF   rG   r@   r>   r  r  z
  sA    !#F;+0@<2*F%r@   r  c                   &    \ rS rSrS rS rS rSrg)r  i
  c           	          [        [        [        [        5       SS 5      [	        5       /5      5      nUR                  X5      $ r  )r|  r   r  r   GraphemeBoundaryr   )r;   r   ri  grapheme_matchers       r>   r  Grapheme._compile   sA     "(JvxD,I

, #    ''77r@   c                 F    [        SR                  [        U-  5      5        g )Nz
{}GRAPHEME)r  r8   r  r  s      r>   r  Grapheme.dump  s    l!!&6/23r@   c                     [         $ r  r  r`  s    r>   r  Grapheme.max_width  r  r@   rG   N)rA   rB   rC   rD   r  r  r  rF   rG   r@   r>   r  r  
  s    84r@   r  c                       \ rS rSrS rSrg)r^  i  c                 (    [         R                  S4/$ r  )r  GRAPHEME_BOUNDARYr  s      r>   r   GraphemeBoundary.compile  s    %%q)**r@   rG   N)rA   rB   rC   rD   r   rF   rG   r@   r>   r^  r^    s    +r@   r^  c                       \ rS rSr\R
                  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)r  i  GREEDY_REPEATc                 R    [         R                  U 5        Xl        X l        X0l        g r  )r]  r:   r  r  r	  )r;   r  r  r	  s       r>   r:   GreedyRepeat.__init__  s    4 $""r@   c                 <    U R                   R                  XU5        g r  r  rh  s       r>   rj  GreedyRepeat.fix_groups  r  r@   c                     U R                   R                  X5      n[        U 5      " X0R                  U R                  5      $ r  )r  r   r  r  r	  r;   r   r   r  s       r>   r   GreedyRepeat.optimise  s/    __--d<
Dz*nndnnEEr@   c                 F    U R                   R                  U5      U l         U $ r  r  rq  s     r>   rr  GreedyRepeat.pack_characters$  r  r@   c                 D    U R                   R                  5       U l         U $ r  r  r`  s    r>   ru  GreedyRepeat.remove_captures(  r  r@   c                 v    U R                   U R                  :H  =(       a    U R                  R                  5       $ r  )r  r	  r  ry  r`  s    r>   ry  GreedyRepeat.is_atomic,  s'    ~~/ODOO4M4M4OOr@   c                     gr  rG   r`  s    r>   r}  GreedyRepeat.can_be_affix/  r  r@   c                 6    U R                   R                  5       $ r  r  r`  s    r>   r  GreedyRepeat.contains_group2  r  r@   c                 ~    U R                   R                  U5      nU R                  S:X  a  UR                  S 5        U$ r  )r  r  r  r   )r;   r   r   s      r>   r  GreedyRepeat.get_firstset5  s2    __))'2>>QFF4L	r@   c                 :   U R                   U R                  /nU R                  c  UR                  [        5        OUR                  U R                  5        U R
                  R                  X5      nU(       d  / $ [        U5      /U-   [        R                  4/-   $ r  )
r  r  r	  rb   r  r  r   r   r  r  )r;   r   ri  repeatr  s        r>   r  GreedyRepeat._compile<  st    ,,/>>!MM)$MM$..)__,,W<
Iv*,
|;<r@   c                     U R                   c  SnOU R                   n[        SR                  [        U-  U R                  U R
                  U5      5        U R                  R                  US-   U5        g )NINF
{}{} {} {}r.   )r	  r  r8   r  r  r  r  r  r;   r  r   rZ  s       r>   r  GreedyRepeat.dumpI  s^    >>!ENNEl!!&6/4==
..%! 	" 	VaZ1r@   c                 6    U R                   R                  5       $ r  r  r`  s    r>   r  GreedyRepeat.is_emptyS  r   r@   c                     [        U 5      [        U5      L =(       aG    U R                  U R                  U R                  4UR                  UR                  UR                  4:H  $ r  )r  r  r  r	  r  s     r>   r  GreedyRepeat.__eq__V  sT    DzT%[( doot~~
...#..
//. 	r@   c                 v    U R                   c  [        $ U R                  R                  5       U R                   -  $ r  )r	  r  r  r  r`  s    r>   r  GreedyRepeat.max_width[  s.    >>!((*T^^;;r@   c                 j   U R                   c  [        OU R                   nU R                  S:X  a/  U R                  R	                  5       U-  n[        U[        5      S 4$ U R                  R                  U5      u  pEU(       a  XE4$ U R                  R	                  5       U-  n[        U[        5      S 4$ r  )r	  r  r  r  r  rX  r  )r;   r   r	  r}   ofsreqs         r>   r   GreedyRepeat.get_required_stringa  s    !%!7IT^^	>>Q))+i7Aq)$d**??66w?8OOO%%')31i $&&r@   )r	  r  r  N)rA   rB   rC   rD   r  rj  r  r  r:   rj  r   rr  ru  ry  r}  r  r  r  r  r  r  r  r  rF   rG   r@   r>   r  r    s_    GH#<F
P0=2*
<'r@   r  c                   &    \ rS rSrS rS rS rSrg)r  in  c                     grx  rG   r`  s    r>   ry  PossessiveRepeat.is_atomico  r{  r@   c                 z   U R                   R                  X5      nU(       d  / $ U R                  U R                  /nU R                  c  UR                  [        5        OUR                  U R                  5        [        R                  4[        U5      /U-   [        R                  4[        R                  4/-   $ r  )r  r   r  r  r	  rb   r  r  r  r   r  )r;   r   ri  r  r  s        r>   r  PossessiveRepeat._compiler  s    __,,W<
I,,/>>!MM)$MM$..)))f.;z66*?  	r@   c                 2   [        SR                  [        U-  5      5        U R                  c  SnOU R                  n[        SR                  [        US-   -  U R                  U R
                  U5      5        U R                  R                  US-   U5        g )Nr  r  r  r.   rV   )r  r8   r  r	  r  r  r  r  r  s       r>   r  PossessiveRepeat.dump  sz    j01>>!ENNEl!!&FQJ"7
..%! 	" 	VaZ1r@   rG   N)rA   rB   rC   rD   ry  r  r  rF   rG   r@   r>   r  r  n  s    
2r@   r  c                   t    \ 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Srg)r  i  c                 `    [         R                  U 5        Xl        X l        X0l        S U l        g r  )r]  r:   r   rg  r  r  )r;   r   rg  r  s       r>   r:   Group.__init__  s&    4 	
$r@   c                     XU4U R                   R                  U R                  '   U R                  R	                  XU5        g r  )r   defined_groupsrg  r  rj  rh  s       r>   rj  Group.fix_groups  s3    04u/E		  ,""7U;r@   c                 z    U R                   R                  X5      n[        U R                  U R                  U5      $ r  )r  r   r  r   rg  rp  s       r>   r   Group.optimise  s-    __--d<
TYY

J77r@   c                 F    U R                   R                  U5      U l         U $ r  r  rq  s     r>   rr  Group.pack_characters  r  r@   c                 6    U R                   R                  5       $ r  r  r`  s    r>   ru  Group.remove_captures      ..00r@   c                 6    U R                   R                  5       $ r  rC  r`  s    r>   ry  Group.is_atomic  r  r@   c                     gr  rG   r`  s    r>   r}  Group.can_be_affix  r  r@   c                     grx  rG   r`  s    r>   r  Group.contains_group  r{  r@   c                 8    U R                   R                  U5      $ r  r  r  s     r>   r  Group.get_firstset  r  r@   c                 6    U R                   R                  5       $ r  r  r`  s    r>   r  Group.has_simple_start  r  r@   c                 
   / nU R                   =pEUS:  a2  U R                  R                  U   nU R                  R                  U-
  nU R                   X4nU R                  R                  R                  U5      nUb  U[        R                  U4/-  nU[        R                  [        U(       + 5      XT4/-  nX0R                  R                  X5      -  nU[        R                  4/-  nUb  U[        R                  4/-  nU$ r  )rg  r   private_groupsr~  	call_refsr   r  r  GROUPr  r  r   r  )r;   r   ri  r   public_groupprivate_groupr  r  s           r>   r  Group._compile  s    '+zz119933MBL II11MAMjj'(ii!!%%c*?bkk3'((D"((CG,mJKK''77"&&?bffZL Dr@   c                     U R                   nUS:  a	  [        U   n[        SR                  [        U-  U5      5        U R
                  R                  US-   U5        g )Nr   z
{}GROUP {}r.   )rg  r  r  r8   r  r  r  )r;   r  r   rg  s       r>   r  
Group.dump  sM    

19"5)El!!&6/59:VaZ1r@   c                     [        U 5      [        U5      L =(       a1    U R                  U R                  4UR                  UR                  4:H  $ r  )r  rg  r  r  s     r>   r  Group.__eq__  sB    T
d5k) *tzz4??.K;;((
)/* 	+r@   c                 6    U R                   R                  5       $ r  r  r`  s    r>   r  Group.max_width  r  r@   c                 8    U R                   R                  U5      $ r  r  r  s     r>   r  Group.get_required_string  r
  r@   c                     S U l         g r  r  r`  s    r>   r  Group.__del__  r  r@   )r  rg  r   r  N)rA   rB   rC   rD   r:   rj  r   rr  ru  ry  r}  r  r  r  r  r  r  r  r  r  rF   rG   r@   r>   r  r    sR    <8
1+52,2++<r@   r  c                   0    \ rS rSr\R
                  rSrSrg)Keepi  KEEPrG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r  r    s    ggGHr@   r  c                   0    \ rS rSr\R
                  rSrSrg)r  i  LAZY_REPEATrG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r  r    r$  r@   r  c                   r    \ rS rSrSS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)rr  i  AHEADBEHINDrW  c                 z    [         R                  U 5        [        U5      U l        [        U5      U l        X0l        g r  )r]  r:   r   rs  r   r  )r;   rs  r   r  s       r>   r:   LookAround.__init__  s+    4 6lX$r@   c                 P    U R                   R                  XR                  U5        g r  )r  rj  rs  rh  s       r>   rj  LookAround.fix_groups  s    ""7KK?r@   c                     U R                   R                  XR                  5      nU R                  (       a  UR	                  5       (       a  U$ [        U R                  U R                  U5      $ r  )r  r   rs  r   r  rr  rp  s       r>   r   LookAround.optimise  sL    __--dKK@
==Z0022$++t}}jAAr@   c                 F    U R                   R                  U5      U l         U $ r  r  rq  s     r>   rr  LookAround.pack_characters  r  r@   c                 6    U R                   R                  5       $ r  r  r`  s    r>   ru  LookAround.remove_captures  r  r@   c                 6    U R                   R                  5       $ r  rC  r`  s    r>   ry  LookAround.is_atomic   r  r@   c                 6    U R                   R                  5       $ r  r  r`  s    r>   r}  LookAround.can_be_affix  r  r@   c                 6    U R                   R                  5       $ r  r  r`  s    r>   r  LookAround.contains_group  r  r@   c                     U R                   (       a+  U R                  U:X  a  U R                  R                  U5      $ [	        S /5      $ r  )r   rs  r  r  r   r  s     r>   r  LookAround.get_firstset	  s5    ==T[[G3??//88D6{r@   c                 D   SnU R                   (       a	  U[        -  nU(       a	  U[        -  nU(       a	  U[        -  n[        R
                  U[        U R                  (       + 5      4/U R                  R                  U R                  5      -   [        R                  4/-   $ r  )r   r  r  r  r  
LOOKAROUNDr  rs  r  r   r  r  s       r>   r  LookAround._compile  s~    ==[ EXEZE--O(<=>
//
!
!$++
./3566*> 	?r@   c                     [        SR                  [        U-  U R                  U R                     [
        U R                     5      5        U R                  R                  US-   U R                  5        g )Nz{}LOOK{} {}r.   )	r  r8   r  	_dir_textrs  r  r   r  r  r  s      r>   r  LookAround.dump  sV    m""6F?
..
%x'>@ 	AVaZ5r@   c                 \    U R                   =(       a    U R                  R                  5       $ r  )r   r  r  r`  s    r>   r  LookAround.is_empty   s    }};!9!9!;;r@   c                     [        U 5      [        U5      L =(       aG    U R                  U R                  U R                  4UR                  UR                  UR                  4:H  $ r  )r  rs  r   r  r  s     r>   r  LookAround.__eq__#  sT    DzT%[( Odkk4==
//.$||U^^U=M=MN.O 	Or@   c                     gr  rG   r`  s    r>   r  LookAround.max_width'  r  r@   )rs  r   r  N)rA   rB   rC   rD   r  r:   rj  r   rr  ru  ry  r}  r  r  r  r  r  r  r  rF   rG   r@   r>   rr  rr    sU    x0I%@B1+.0
?6
<Or@   rr  c                   r    \ rS rSrSS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)rz  i*  r  r  rW  c                     [         R                  U 5        [        U5      U l        [        U5      U l        X0l        X@l        XPl        g r  )r]  r:   r   rs  r   r  r  r  )r;   rs  r   r  r  r  s         r>   r:   LookAroundConditional.__init__-  s5    4 6lX$ r@   c                     U R                   R                  XU5        U R                  R                  XU5        U R                  R                  XU5        g r  )r  rj  r  r  rh  s       r>   rj   LookAroundConditional.fix_groups5  s>    ""7U;  59%8r@   c                 $   U R                   R                  XR                  5      nU R                  R                  XR                  5      nU R                  R                  XR                  5      n[        U R                  U R                  UXE5      $ r  )r  r   rs  r  r  rz  r   )r;   r   r   r  r  r  s         r>   r   LookAroundConditional.optimise:  sh    __--dKK@
==))$<,,''kk:$T[[$--
 	r@   c                     U R                   R                  U5      U l         U R                  R                  U5      U l        U R                  R                  U5      U l        U $ r  )r  rr  r  r  rq  s     r>   rr  %LookAroundConditional.pack_charactersB  sI    //99$?55d;||33D9r@   c                     U R                   R                  5       U l         U R                  R                  5       U l        U R                  R                  5       U l        g r  )r  ru  r  r  r`  s    r>   ru  %LookAroundConditional.remove_capturesH  s>    //99;557||335r@   c                     U R                   R                  5       =(       a;    U R                  R                  5       =(       a    U R                  R                  5       $ r  )r  ry  r  r  r`  s    r>   ry  LookAroundConditional.is_atomicM  s@    ))+ #0G0G0I #
,,
 
 
"	$r@   c                     U R                   R                  5       =(       a;    U R                  R                  5       =(       a    U R                  R                  5       $ r  )r  r}  r  r  r`  s    r>   r}  "LookAroundConditional.can_be_affixQ  s@    ,,. *4==3M3M3O *ll'')	+r@   c                     U R                   R                  5       =(       d;    U R                  R                  5       =(       d    U R                  R                  5       $ r  )r  r  r  r  r`  s    r>   r  $LookAroundConditional.contains_groupU  sD    ..0 J
--
&
&
(J,0LL,G,G,I	Kr@   c                 h   [         R                  [        U R                  5      [        U R                  (       + 5      4/nUR                  U R                  R                  U R                  U5      5        UR                  [         R                  45        UR                  U R                  R                  X5      5        U R                  R                  X5      nU(       a1  UR                  [         R                  45        UR                  U5        UR                  [         R                  45        U$ r  )r  CONDITIONALr  r   rs  r   r  r   rb   rA  r  r  r  r
  s        r>   r  LookAroundConditional._compileY  s    T]]!3ST[[5IJKDOO++DKK?@RWWK DMM))'9:<<''7KK$KK!RVVJr@   c                 ,   [        SR                  [        U-  U R                  U R                     [
        U R                     5      5        U R                  R                  US-   U R                  5        [        SR                  [        U-  5      5        U R                  R                  US-   U5        U R                  R                  5       (       dA  [        SR                  [        U-  5      5        U R                  R                  US-   U5        g g )Nz{}CONDITIONAL {} {}r.   z{}EITHERrD  )r  r8   r  r  rs  r  r   r  r  r  r  r  r  s      r>   r  LookAroundConditional.dumpg  s    #**6F?
..
%x'>@ 	AVaZ5j016A:w/||$$&&&--01LLfqj'2 'r@   c                     U R                   R                  5       =(       a    U R                  R                  5       =(       d    U R                  R                  5       $ r  )r  r  r  r  r`  s    r>   r  LookAroundConditional.is_emptyq  s>    ((*Gt}}/E/E/G "
,,


!	#r@   c                     [        U 5      [        U5      L =(       aG    U R                  U R                  U R                  4UR                  UR                  UR                  4:H  $ r  )r  r  r  r  r  s     r>   r  LookAroundConditional.__eq__u  sT    DzT%[( Mdoot}}
,,.!,,ennemmL.M 	Mr@   c                 z    [        U R                  R                  5       U R                  R                  5       5      $ r  r  r`  s    r>   r  LookAroundConditional.max_widthy  r  r@   c                 &    U R                  5       S 4$ r  r  r  s     r>   r  )LookAroundConditional.get_required_string|  r  r@   )rs  r  r   r  r  N)rA   rB   rC   rD   r  r:   rj  r   rr  ru  ry  r}  r  r  r  r  r  r  r  rF   rG   r@   r>   rz  rz  *  sU    x0I9
6
$+K3#MH&r@   rz  c                        \ rS rSrS rS rSrg)r  i  c                     Xl         g r  r   )r;   r   s     r>   r:   PrecompiledCode.__init__  s    	r@   c                 .    [        U R                  5      /$ r  )r   r   r  s      r>   r  PrecompiledCode._compile  s    dii !!r@   r  Nr  rG   r@   r>   r  r    s    "r@   r  c                   <   \ rS rSr\S4\R                  \S4\R                  \	S4\R                  \
S4\R                  \S4\R                  \S4\R                  \	S4\R                  \
S4\R                  0rS\S4S jrS rSS jrS rS rS	 rS
 rS rS rSrg)r<  i  FTc                    [         R                  U 5        Xl        [        U5      U l        [
        U   U l        [        U5      U l        U R                  U R                  U R                  U R                  U R                  4U l	        g r  )
r]  r:   rf   r   r   rc  r   r   ra   r_  r  s        r>   r:   Property.__init__  s`    4 
X1*=i^^TZZ
//4>>+	r@   c                 0    [        U R                  XU5      $ r  )r<  rf   re  s       r>   rd  Property.rebuild  s    

H)DDr@   c                     U $ r  rG   r  s       r>   r   Property.optimise  ro  r@   c                     [        U /5      $ r  r  r  s     r>   r  Property.get_firstset  r  r@   c                     grx  rG   r`  s    r>   r  Property.has_simple_start  r{  r@   c                     SnU R                   (       a	  U[        -  nU R                  (       a	  U[        -  nU(       a	  U[        -  nU R
                  U R                  U4   X0R                  4/$ r  )r   r  r   r  r  r  r   rf   r  s       r>   r  Property._compile  sZ    ==[ E>>\!EXEdoow67

KLLr@   c           
          [         U R                  S-	     nUS   US   U R                  S-     pT[        SR                  [        U-  [
        U R                     XE[        U R                     5      5        g )NrY   r   r.   i  z{}PROPERTY {} {}:{}{})	PROPERTY_NAMESrf   r  r8   r  r  r   r  r   )r;   r  r   r   r   rf   s         r>   r  Property.dump  si    djjB./1gtAwtzzF':;e%,,Vf_
4==
!4	$//0JL 	Mr@   c                 ^    [         R                  " U R                  U5      U R                  :H  $ r  )r   has_property_valuerf   r   r  s     r>   r  Property.matches  s"    ((R8DMMIIr@   c                     gr  rG   r`  s    r>   r  Property.max_width  r  r@   )r_  r   r   rf   r   Nr  )rA   rB   rC   rD   r   r  PROPERTYr   PROPERTY_IGNr   r  PROPERTY_REVPROPERTY_IGN_REVr  r:   rd  r   r  r  r  r  r  r  rF   rG   r@   r>   r<  r<    s    j%-@oo%("++7Noo~rT8JHd+R__~
?  	"G (,	+EMMJr@   r<  c                       \ rS rSrSrS rSrg)Prunei  PRUNEc                 &    [         R                  4/$ r  )r  r$  r  s      r>   r  Prune._compile  s    ~r@   rG   Nr7  rG   r@   r>   r#  r#    s    Hr@   r#  c                   4   \ rS rSr\S4\R                  \S4\R                  \	S4\R                  \
S4\R                  \S4\R                  \S4\R                  \	S4\R                  \
S4\R                  0rSrS\S4S jrS rSS jrS rS	 rS
 rS rSrg)r  i  FTRANGEc                 4   [         R                  U 5        Xl        X l        [	        U5      U l        [        U   U l        [	        U5      U l        U R                  U R                  U R                  U R
                  U R                  U R                  4U l
        g r  )r]  r:   lowerr.  r   r   rc  r   r   ra   r_  )r;   r*  r.  r   r   r   s         r>   r:   Range.__init__  sk    4 

X1*=i^^TZZT]]
//4>>+	r@   c                 F    [        U R                  U R                  XU5      $ r  )r  r*  r.  re  s       r>   rd  Range.rebuild  s    TZZX9MMr@   c                    U R                   (       a  U R                  [        -  (       a  U(       a  U $ UR                  [        -  (       a  U R                  [
        -  [
        :w  a  U $ [        R                  " 5       n/ nU H  nU R                  [        U5      s=::  a  U R                  ::  d  M/  O  M3  [        R                  " [        U5      nUR                  [        U Vs/ s H  n[        U5      PM     snU R                  S95        M     U(       d  U $ [        U5      U R                  U R                  -
  S-   :  a  UR!                  SU 5        [#        U5      $ s  snf )Nr   r.   r   )r   r   r   r   r   r  r   r  r*  r   r.  r   r  rb   r  re   r  r   )	r;   r   r   r   r  r  r   r  r   s	            r>   r   Range.optimise  s   }}T__z%AfK g%4??^+K
+K !668 !BzzSW2

22))*;R@VV$<VSVV$<!__. / " Ku:

TZZ/!33LLD!e} %=s   #Ec                     SnU R                   (       a	  U[        -  nU R                  (       a	  U[        -  nU(       a	  U[        -  nU R
                  U R                  U4   X0R                  U R                  4/$ r  )	r   r  r   r  r  r  r   r*  r.  r  s       r>   r  Range._compile  sg    ==[ E>>\!EXEdoow67


**  	r@   c           
      D   [        [        U R                  5      5      R                  S5      n[        [        U R                  5      5      R                  S5      n[        SR                  [        U-  [        U R                     X4[        U R                     5      5        g )Nr  z{}RANGE {} {} {}{})r  r  r*  r  r.  r  r8   r  r  r   r  r   )r;   r  r   display_lowerdisplay_uppers        r>   r  
Range.dump   sr    c$**o.55d;c$**o.55d;"))&6/
4==
!=
DOO
$& 	'r@   c                     U R                   Us=:*  =(       a    U R                  :*  U R                  :H  $ s  U R                  :H  $ r  )r*  r.  r   r  s     r>   r  Range.matches  s5    

b..DJJ.4==@@.4==@@r@   c                     gr  rG   r`  s    r>   r  Range.max_width
  r  r@   )r_  r   r*  r   r.  r   Nr  )rA   rB   rC   rD   r   r  r(  r   	RANGE_IGNr   r  	RANGE_REVRANGE_IGN_REVr  r  r:   rd  r   r  r  r  r  rF   rG   r@   r>   r  r    s    :u*=r||NE#:BLLtnbllZ$68H8H~t&<b>N>NPG H.2v
+N>	'Ar@   r  c                   (   \ rS rSr\S4\R                  \S4\R                  \	S4\R                  \
S4\R                  \S4\R                  \S4\R                  \	S4\R                  \
S4\R                  0r\4S jrS rS rS rS rS	 rS
 rSrg)r   i  FTc                     [         R                  U 5        Xl        X l        X0l        [
        U   U l        U R                  U R                  U R                  4U l        g r  )	r]  r:   r   rg  r   rc  r   ra   r_  )r;   r   rg  r   r   s        r>   r:   RefGroup.__init__  sE    4 	
 1*=NNDJJ?	r@   c                     [        U R                  5      U l        SU R                  s=::  a  U R                  R                  ::  d  O  [        SXR                  5      eU R                  U R                  U R                  4U l        g ! [         aP     U R                  R                  U R                     U l         N! [
         a    [        SXR                  5      ef = ff = f)NrQ  r.   rP  )r  rg  r6  r   r  r   r&   r   r~  ra   r   r_  rh  s       r>   rj  RefGroup.fix_groups  s    	ETZZDJ DJJ7$))"7"7717MMJJNNDJJ?	  	EE!YY224::>
 EOWmmDDE	Es   B 
C"(B==!CC"c                 8    [        S[        U R                  5      er  r  r`  s    r>   ru  RefGroup.remove_captures+  r  r@   c                 v    SnU(       a	  U[         -  nU R                  U R                  U4   X0R                  4/$ r  )r  r  r   rg  r  s       r>   r  RefGroup._compile.  s8    XEdoow67

KLLr@   c                     [        SR                  [        U-  U R                  [        U R
                     5      5        g )Nz{}REF_GROUP {}{})r  r8   r  rg  r  r   r  s      r>   r  RefGroup.dump4  s0     ''
DOO
$& 	'r@   c                     [         $ r  r  r`  s    r>   r  RefGroup.max_width8  r  r@   c                     S U l         g r  r  r`  s    r>   r  RefGroup.__del__;  r  r@   )r_  r   rg  r   r   N)rA   rB   rC   rD   r   r  	REF_GROUPr   REF_GROUP_IGNr   r  REF_GROUP_FLDREF_GROUP_REVREF_GROUP_IGN_REVREF_GROUP_FLD_REVr  r:   rj  ru  r  r  r  r  rF   rG   r@   r>   r   r     s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G :@ @@KM'r@   r   c                   0    \ rS rSr\R
                  rSrSrg)r  i>  SEARCH_ANCHORrG   N)	rA   rB   rC   rD   r  rS  r  r  rF   rG   r@   r>   r  r  >  r'  r@   r  c                       \ rS rSrSS jrS rS rS rS rS r	S	 r
S
 rS rS rS rS r\S 5       r\S 5       r\S 5       rS rS rS rS rSrg)r   iB  Nc                 D    [         R                  U 5        Uc  / nXl        g r  )r]  r:   r  )r;   r  s     r>   r:   Sequence.__init__C  s    4 =E
r@   c                 N    U R                    H  nUR                  XU5        M     g r  )r  rj  )r;   r2   r   ri  r{   s        r>   rj  Sequence.fix_groupsJ  s    ALL51 r@   c                     / nU R                    HW  nUR                  X5      n[        U[        5      (       a  UR	                  UR                   5        MF  UR                  U5        MY     [        U5      $ r  )r  r   r/   r   r   rb   r[  )r;   r   r   r  r{   s        r>   r   Sequence.optimiseN  sX    A

4)A!X&&QWW%Q  U##r@   c                   ^ / n/ n[         nU R                   GH  n[        U5      [        L a  UR                  (       a  UR
                  (       d|  UR                  U:w  aO  UR                  (       d  [        TUR                  5      (       a#  [        R                  TUXB5        UR                  nUR                  UR                  5        M  [        U5      [        L d  [        U5      [        L a|  UR                  U:w  aN  UR                  (       d  [        U4S jU 5       5      (       a#  [        R                  TUXB5        UR                  nUR                  UR                   5        GMT  [        R                  TX4U5        UR                  UR#                  T5      5        GM     [        R                  TX4U5        [%        U5      $ )z+Packs sequences of characters into strings.c              3   <   >#    U  H  n[        TU5      v   M     g 7fr  r   r  r   r   s     r>   r  +Sequence.pack_characters.<locals>.<genexpr>o  s$      +"  DE:dA+>+>    )r   r  r  r   r   r   r   r   rf   r   _flush_charactersrb   r  r   r  r   r!  rr  r[  )r;   r   r  r!  r   r{   s    `    r>   rr  Sequence.pack_charactersZ  sN   

AAw)#

1;;<<:- ||z$'@'@ 224$- &'\\
!!!''*aF"d1g&8<<:- ||s +" +" (" (" 224$- &'\\
!!!,,/**4OQ..t457 : 	""4GU##r@   c                 n    U R                    Vs/ s H  oR                  5       PM     snU l         U $ s  snf r  )r  ru  )r;   r{   s     r>   ru  Sequence.remove_captures  s-    37::>:a''):>
 ?r(  c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r+  r  r{   s     r>   r  %Sequence.is_atomic.<locals>.<genexpr>       5*Q;;==*r/  r  r  r`  s    r>   ry  Sequence.is_atomic      5$**555r@   c                     gr  rG   r`  s    r>   r}  Sequence.can_be_affix  r  r@   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r9  rg  s     r>   r  *Sequence.contains_group.<locals>.<genexpr>  s     :z!##%%zr/  )r  r  r`  s    r>   r  Sequence.contains_group  s    :tzz:::r@   c                     [        5       nU R                  nU(       a  UR                  5         U H1  nX$R                  U5      -  nS U;  a  Us  $ UR	                  S 5        M3     U[        S /5      -  $ r  )r   r  r   r  discard)r;   r   r   r  r{   s        r>   r  Sequence.get_firstset  sd    U

MMOA..))B2~	JJt	  CKr@   c                 t    [        U R                  5      =(       a    U R                  S   R                  5       $ r  )r   r  r  r`  s    r>   r  Sequence.has_simple_start  s'    DJJDDJJqM$B$B$DDr@   c                     U R                   nU(       a  US S S2   n/ nU H#  nUR                  UR                  X5      5        M%     U$ r?  )r  r   r   )r;   r   ri  seqr   r{   s         r>   r  Sequence._compile  sF    jjdd)CAKK		'12  r@   c                 L    U R                    H  nUR                  X5        M     g r  )r  r  )r;   r  r   r{   s       r>   r  Sequence.dump  s    AFF6# r@   c                 .  ^  U(       d  g U[         -  (       a   [        U 4S jU 5       5      (       d  [        nU[        -  [        :X  a  [        R                  U5      nU Hh  nUR                  n[        U5      S:X  a(  UR                  [        US   UR                  S95        MF  UR                  [        XeR                  S95        Mj     OD[        U5      S:X  a  UR                  [        US   US95        OUR                  [        XS95        / US S & g )Nc              3   <   >#    U  H  n[        TU5      v   M     g 7fr  r]  r^  s     r>   r  -Sequence._flush_characters.<locals>.<genexpr>  s     ?Jqz$**Jr`  r.   r   r   )r   r  r   r  r   _fix_full_casefoldr!  re   rb   r   r   r  )r   r!  r   r  literalsr   charss   `      r>   ra  Sequence._flush_characters  s     
"?J???#
'N:22:>H u:?LL58!PQLL//!JK ! :!#Yz!}LMVJFG
1r@   c                    [         R                  " 5        Vs/ s H  n[         R                  " [        U5      PM      nn[         R                  " [        SR	                  S U  5       5      5      R                  5       n/ nU HX  nUR                  " U5      nUS:  d  M  UR                  Xf[        U5      -   45        UR                  " XVS-   5      nUS:  a  M;  MZ     Sn/ n[        R                  U5       HJ  u  pXy:  a  UR                  [        XU	 [        S95        UR                  [        X	U
 [        S95        U
nML     U[        U 5      :  a  UR                  [        XS  [        S95        U$ s  snf )Nro   c              3   8   #    U  H  n[        U5      v   M     g 7fr  r  r  s     r>   r  .Sequence._fix_full_casefold.<locals>.<genexpr>  s      =a >AVVrO  r   r.   r   )r   r  r   r  rd   r*  findrb   re   r   _merge_chunksr   r   r  )r!  r   expandedr   chunksrv   foundr3   r  r  r  s              r>   r  Sequence._fix_full_casefold  s`   
 
&
&
(*
( @AF$$%6:
( 	 *!!"3RWW == 6   % 	AKKNE1*uc!fn56Aqy1 1*  "008JE{
(?'!) * OOGJs$;') *C 9 Z OOGJu$6:NO9*s   %E5c                     [        U 5      S:  a  U $ U R                  5         U S   u  p/ nU SS   H+  u  pEXB::  a  [        X%5      nM  UR                  X45        XEp!M-     UR                  X45        U$ )NrV   r   r.   )re   sortr@  rb   )r  r  r  
new_chunksr{   rv   s         r>   r  Sequence._merge_chunks  sx    v;?MAY

13LDAx#k!!5,/s ! 	5,'r@   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  r  s     r>   r  $Sequence.is_empty.<locals>.<genexpr>   s     4A::<<r/  rj  r`  s    r>   r  Sequence.is_empty  s    4444r@   c                 n    [        U 5      [        U5      L =(       a    U R                  UR                  :H  $ r  )r  r  r  s     r>   r  Sequence.__eq__  r  r@   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  rg  s     r>   r  %Sequence.max_width.<locals>.<genexpr>  ri  r/  )sumr  r`  s    r>   r  Sequence.max_width  rl  r@   c                     U R                   nU(       a  US S S2   nSnU H&  nUR                  U5      u  pVX5-  nU(       d  M#  X64s  $    US 4$ r  )r  r  )r;   r   ry  offsetr{   r  r  s          r>   r  Sequence.get_required_string  s\    jjdd)CA,,W5HCMFs{"	  t|r@   rZ  r  )rA   rB   rC   rD   r:   rj  r   rr  ru  ry  r}  r  r  r  r  r  r  ra  r  r  r  r  r  r  rF   rG   r@   r>   r   r   B  s    2
$$$L6; E	$  6  B  (5G6r@   r   c                   T    \ rS rSrS\S4S jrS rS rS rS r	S	 r
S
 rS rS rSrg)rv  i  TFc                 @   [         R                  U 5        Xl        [        U5      U l        [        U5      U l        [        U   U l        [        U5      U l	        SU l
        U R                  U R                  U R                  U R                  U R                  4U l        g r  )r]  r:   r   r   r  r   r   rc  r   r   
char_widthra   r_  )r;   r   r  r   r   r   s         r>   r:   SetBase.__init__  sr    4 	5\
X1*=i^^TZZ
//4>>+	r@   c                     [        U 5      " U R                  U R                  XU5      R                  U R                  S5      $ r  )r  r   r  r   re  s       r>   rd  SetBase.rebuild&  s4    Dz$))TZZ
Xdii/	0r@   c                     [        U /5      $ r  r  r  s     r>   r  SetBase.get_firstset*  r  r@   c                     grx  rG   r`  s    r>   r  SetBase.has_simple_start-  r{  r@   c                 r   SnU R                   (       a	  U[        -  nU R                  (       a	  U[        -  nU(       a	  U[        -  nU R
                  U R                  U4   U4/nU R                   H"  nUR                  UR                  5       5        M$     UR                  [        R                  45        U$ r  )r   r  r   r  r  r  r   r  r   r   rb   r  r  )r;   r   ri  r   r   ri   s         r>   r  SetBase._compile0  s    ==[ E>>\!EXEdoow67?@AKK		$  	RVVJr@   c           	          [        SR                  [        U-  U R                  [        U R
                     [        U R                     5      5        U R                   H  nUR                  US-   U5        M     g )Nz	{}{} {}{}r.   )
r  r8   r  r  r  r   r  r   r  r  )r;   r  r   rx   s       r>   r  SetBase.dump@  s[    k  &$--
4==
!9T__#=? 	@AFF6A:w' r@   c                    U R                   (       a  U R                  [        -  (       a  U(       a  U $ U R                  R                  [
        -  (       a  U R                  [        -  [        :w  a  U $ [        R                  " 5       n/ n[        5       nU H  nU R                  [        U5      5      (       d  M$  [        R                  " [        U5      nXu;  d  MF  UR                  [        U Vs/ s H  n[        U5      PM     snU R                  S95        UR!                  U5        M     U(       d  U $ [#        U /U-   5      $ s  snf ru  )r   r   r   r   r   r   r  r   r  r   r  r   r   r  rb   r  r   r   )	r;   r   r   r  r  seenr   r  r   s	            r>   _handle_case_foldingSetBase._handle_case_foldingF  s    }}T__z%AfK 7*
1+0,K !668 u!B||CG$$))*;R@%LL(@AQ(@!%"2 3HHV$ " Ktfun%% )As   /Ec                    U R                   (       a  U R                  [        -  (       d  gU R                  R                  [
        -  (       a  U R                  [        -  [        :w  a  g[        R                  " 5       n[        5       nU HP  nU R                  [        U5      5      (       d  M$  [        R                  " [        U5      nUR                  U5        MR     U(       d  g[        S U 5       5      $ )Nr.   c              3   8   #    U  H  n[        U5      v   M     g 7fr  rK  )r  r  s     r>   r  $SetBase.max_width.<locals>.<genexpr>{  s     2T63v;;TrO  )r   r   r   r   r   r   r  r   r  r   r  r   r   r  r   r@  )r;   r  r  r   r  s        r>   r  SetBase.max_widthd  s    }}T__z%A 7*
1+0, !668 u!B||CG$$))*;R@  "
 2T222r@   c                     S U l         g r  r  r`  s    r>   r  SetBase.__del__}  r  r@   )r_  r   r  r   r  r   r   N)rA   rB   rC   rD   r   r:   rd  r  r  r  r  r  r  r  rF   rG   r@   r>   rv  rv    s7    -1f+0 (&<32r@   rv  c                      \ rS rSr\S4\R                  \S4\R                  \	S4\R                  \
S4\R                  \S4\R                  \S4\R                  \	S4\R                  \
S4\R                  0rSrS	S jrS rSrg)
r  i  FTSET_DIFFc                 L  ^^ U R                   n[        U5      S:  a  US   [        TUSS  5      /n[        U5      S:X  a8  US   R                  U R                  U R
                  S9R                  TTU5      $ [        UU4S jU 5       5      U l         U R                  TU5      $ )NrV   r   r.   r   c              3   D   >#    U  H  oR                  TTS S9v   M     g7f)Tr   N)r   )r  ri   r   r   s     r>   r  #SetDiff.optimise.<locals>.<genexpr>  s'      
 GH::dGD:A
    )	r  re   r   r   r   r   r   r   r  )r;   r   r   r   r  s    ``  r>   r   SetDiff.optimise  s    

u:>1XxeACk:;Eu:?8&&$// ' ((0w(GH  
 
 ((v66r@   c                     U R                   S   R                  U5      =(       a#    U R                   S   R                  U5      (       + nX R                  :H  $ Nr   r.   r  r  r   r;   r   ri   s      r>   r  SetDiff.matches  sB    JJqM!!"%Gdjjm.C.CB.G*GMM!!r@   rZ  Nr  )rA   rB   rC   rD   r   r  r  r   SET_DIFF_IGNr   r  SET_DIFF_REVSET_DIFF_IGN_REVr  r  r   r  rF   rG   r@   r>   r  r    s    j%-@oo%("++7Noo~rT8JHd+R__~
?  	"G
 H7"r@   r  c                      \ rS rSr\S4\R                  \S4\R                  \	S4\R                  \
S4\R                  \S4\R                  \S4\R                  \	S4\R                  \
S4\R                  0rSrS	S jrS rSrg)
r  i  FT	SET_INTERc                    / nU R                    Hg  nUR                  XSS9n[        U[        5      (       a.  UR                  (       a  UR                  UR                   5        MV  UR                  U5        Mi     [        U5      S:X  a7  US   R                  U R                  U R                  S9R                  XU5      $ [        U5      U l         U R                  X5      $ NTr   r.   r   r   )r  r   r/   r  r   r   rb   re   r   r   r   r   r  r;   r   r   r   r  ri   s         r>   r   SetInter.optimise  s    A

4
6A!X&&1::QWW%Q  u:?8&&$// ' ((0(GH 5\
((66r@   c                 ^   ^ [        U4S jU R                   5       5      nX R                  :H  $ )Nc              3   D   >#    U  H  oR                  T5      v   M     g 7fr  r  r  rx   r   s     r>   r  #SetInter.matches.<locals>.<genexpr>       2z!		"zr  )r  r  r   r  s    ` r>   r  SetInter.matches  $    2tzz22MM!!r@   rZ  Nr  )rA   rB   rC   rD   r   r  r  r   SET_INTER_IGNr   r  SET_INTER_REVSET_INTER_IGN_REVr  r  r   r  rF   rG   r@   r>   r  r    s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G
 H7$"r@   r  c                      \ rS rSr\S4\R                  \S4\R                  \	S4\R                  \
S4\R                  \S4\R                  \S4\R                  \	S4\R                  \
S4\R                  0rSrS	S jrS rSrg)
r   i  FTSET_SYM_DIFFc                    / nU R                    Hg  nUR                  XSS9n[        U[        5      (       a.  UR                  (       a  UR                  UR                   5        MV  UR                  U5        Mi     [        U5      S:X  a7  US   R                  U R                  U R                  S9R                  XU5      $ [        U5      U l         U R                  X5      $ r  )r  r   r/   r   r   r   rb   re   r   r   r   r   r  r  s         r>   r   SetSymDiff.optimise  s    A

4
6A!Z((QZZQWW%Q  u:?8&&$// ' ((0(GH 5\
((66r@   c                 n    SnU R                    H  nX#R                  U5      :g  nM     X R                  :H  $ r  r  )r;   r   ri   rx   s       r>   r  SetSymDiff.matches  s4    AYYr]"A  MM!!r@   rZ  Nr  )rA   rB   rC   rD   r   r  r  r   SET_SYM_DIFF_IGNr   r  SET_SYM_DIFF_REVSET_SYM_DIFF_IGN_REVr  r  r   r  rF   rG   r@   r>   r   r     s    *e1DHe,boo@!!FD>23F3F4"11Hd3CND123J3J	LG
 H7$"r@   r   c                      \ rS rSr\S4\R                  \S4\R                  \	S4\R                  \
S4\R                  \S4\R                  \S4\R                  \	S4\R                  \
S4\R                  0rSrS
S jrS rS rSrg	)r   i  FT	SET_UNIONc                    / nU R                    Hg  nUR                  XSS9n[        U[        5      (       a.  UR                  (       a  UR                  UR                   5        MV  UR                  U5        Mi     [        U5      S:X  aQ  US   nUR                  UR                  U R                  :H  U R                  U R                  S9R                  XU5      $ [        U5      U l         U R                  X5      $ )NTr   r.   r   )r   r   r   )r  r   r/   r   r   r   rb   re   r   r   r   r   r  )r;   r   r   r   r  ri   rx   s          r>   r   SetUnion.optimise  s    A

4
6A!X&&1::QWW%Q  u:?aA<<t}})D   ((0(GH 5\
((66r@   c                 p   SnU R                   (       a	  U[        -  nU R                  (       a	  U[        -  nU(       a	  U[        -  n[        [        5      / pTU R                   HR  n[        U[        5      (       a)  XFR                      R                  UR                  5        MA  UR                  U5        MT     U R                  U R                  U4   U4/nUR                  5        H  u  pSnU(       a	  U[        -  n[        U	5      S:X  a&  UR                  [        R                   X9S   45        ML  UR                  [        R"                  U[        U	5      4[%        U	5      -   5        M     U H"  nUR'                  UR)                  5       5        M$     UR                  [        R*                  45        U$ r  )r   r  r   r  r  r   r   r  r/   r   rb   rf   r  r   re   r  r  STRINGr   r   r   r  )
r;   r   ri  r   r!  othersri   r   r   valuess
             r>   r  SetUnion._compile  sK   ==[ E>>\!EXE(.FA!Y''::&--agg6a 	  doow67?@ * 0 0 2HE$6{aR\\5)<=RYYs6{;eFmKL !3 AKK		$  	RVVJr@   c                 ^   ^ [        U4S jU R                   5       5      nX R                  :H  $ )Nc              3   D   >#    U  H  oR                  T5      v   M     g 7fr  r  r  s     r>   r  #SetUnion.matches.<locals>.<genexpr>  r  r  )r  r  r   r  s    ` r>   r  SetUnion.matches  r  r@   rZ  Nr  )rA   rB   rC   rD   r   r  r  r   SET_UNION_IGNr   r  SET_UNION_REVSET_UNION_IGN_REVr  r  r   r  r  rF   rG   r@   r>   r   r     s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G
 H7( D"r@   r   c                   0    \ rS rSrSr\R                  rSrg)Skipi  SKIPrG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r  r    s    HggGr@   r  c                   0    \ rS rSr\R
                  rSrSrg)r   i  START_OF_LINErG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r   r     r'  r@   r   c                   0    \ rS rSr\R
                  rSrSrg)r   i#  START_OF_LINE_UrG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r   r   #        G Hr@   r   c                   0    \ rS rSr\R
                  rSrSrg)r   i'  START_OF_STRINGrG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r   r   '  r  r@   r   c                   0    \ rS rSr\R
                  rSrSrg)StartOfWordi+  START_OF_WORDrG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r  r  +  r'  r@   r  c                   (   \ rS rSr\S4\R                  \S4\R                  \	S4\R                  \
S4\R                  \S4\R                  \S4\R                  \	S4\R                  \
S4\R                  0r\4S jrS rS rS rS rS	 rS
 rSrg)r  i/  FTc                    [        U5      U l        [        U   U l        U R                  [        -  [        :X  aR  / nU R                   H?  n[
        R                  " [        [        U5      5      nUR                  S U 5       5        MA     OU R                  n[        U5      U l
        SU l        U R                  U R                  U R                  4U l        g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr  r  r  s     r>   r  "String.__init__.<locals>.<genexpr>>  s     (@AQrO  F)r   r!  rc  r   r  r   r   r  r  r   r  requiredra   r_  )r;   r!  r   r  r   r  s         r>   r:   String.__init__6  s    
+1*=OOn,? "))*;SYG!(((@(@@ ( !%!&'8!9NNDOOT__D	r@   c                 p    U(       a  SnOSn[        [        U R                  U   U R                  S9/5      $ )Nr  r   r   )r   r   r!  r   )r;   r   r3   s      r>   r  String.get_firstsetG  s:    CCIdooc2__& ' ( 	(r@   c                     grx  rG   r`  s    r>   r  String.has_simple_startO  r{  r@   c                     SnU(       a	  U[         -  nU R                  (       a	  U[        -  nU R                  U R                  U4   U[        U R                  5      4U R                  -   /$ r  )r  r  REQUIRED_OPr  r   re   r  r  s       r>   r  String._compileR  sj    XE==[ Edoow67
d$$
%')-)?)?@ A 	Ar@   c                     [        SR                  S U R                   5       5      5      R                  S5      n[	        SR                  [        U-  U[        U R                     5      5        g )Nro   c              3   8   #    U  H  n[        U5      v   M     g 7fr  r  r  s     r>   r  String.dump.<locals>.<genexpr>\  s     @1ArO  r  z{}STRING {}{})	r  rd   r!  r  r  r8   r  r  r   r  s       r>   r  String.dump[  sS    @@@AHHNo$$Vf_g
DOO
$& 	'r@   c                 ,    [        U R                  5      $ r  )re   r  r`  s    r>   r  String.max_width`  s    4))**r@   c                 
    SU 4$ r  rG   r  s     r>   r  String.get_required_stringc  s    $wr@   )r_  r   r!  r  r  N)rA   rB   rC   rD   r   r  r  r   
STRING_IGNr   r  
STRING_FLD
STRING_REVSTRING_IGN_REVSTRING_FLD_REVr  r:   r  r  r  r  r  r  rF   rG   r@   r>   r  r  /  s    		J+>^U$;R]]tnbmmj$%79J9J'=	G /5 E"(A'
+r@   r  c                       \ rS rSrS rSrg)r   if  c                     SR                  S U R                   5       5      n[        U5      R                  S5      n[	        SR                  [        U-  U[        U R                     5      5        g )Nro   c              3   8   #    U  H  n[        U5      v   M     g 7fr  r  r  s     r>   r  Literal.dump.<locals>.<genexpr>h  s     :/Q#a&&/rO  r  z{}LITERAL MATCH {}{})	rd   r!  r  r  r  r8   r  r  r   )r;   r  r   literalr  s        r>   r  Literal.dumpg  sX    '':$//::.''-$++FVOW
DOO
$& 	'r@   rG   N)rA   rB   rC   rD   r  rF   rG   r@   r>   r   r   f  s    'r@   r   c                   ,    \ rS rSr\4S jrS rS rSrg)r   im  c                 n   Xl         X l        [        U   U l        U R                  U R                  U R                  4U l        X R                  4U l        U R                  UR                  ;  a,  [        UR                  5      UR                  U R                  '   U R                   R                  U R                     nU R                   R                  U R                     nU R                  nU R                   R                  [        -  nXc-  n/ nU H\  n	[        U	[        5      (       a  U	 V
s/ s H  n
[        U
5      PM     n	n
UR                  U	 V
s/ s H  n
[!        XS9PM     sn
5        M^     UR#                  [        SS9  U Vs/ s H  n[%        U5      PM     snU l        g s  sn
f s  sn
f s  snf )Nr   T)r  r   )r   r   rc  r   ra   r_  set_keynamed_lists_usedre   r  r   r   r/   r0   r   rb   r   r  r   r   )r;   r   r   r   rU  r  r  
fold_flagschoicesr   r   choices               r>   r:   StringSet.__init__n  sc   		1*=NNDIIt>	oo.<<t44425d6K6K2LD!!$,,/		**4<<8		  +__
99??^3*
F&#&&*01&Q#a&&1NN EFIa? 	  	d+8?@f&)@ 2 As   .F(F-

F2c                     [        SR                  [        U-  U R                  [        U R
                     5      5        g )Nz{}STRING_SET {}{})r  r8   r  r   r  r   r  s      r>   r  StringSet.dump  s0    !((&$))
DOO
$& 	'r@   c                     S U l         g r  r  r`  s    r>   r  StringSet.__del__  r  r@   )r_  r   r   r   r   r   N)	rA   rB   rC   rD   r   r:   r  r  rF   rG   r@   r>   r   r   m  s    .4 AB'r@   r   c                   X    \ rS rSrSrS rSS jrSS jrSS jrSS jr	S r
S	 rS
 rSrg)Sourcei  z1Scanner for the regular expression source string.c                     [        U[        5      (       a  Xl        [        U l        OUR
                  " S5      U l        S U l        SU l        SU l        US S U l        g )Nzlatin-1c                     [        U /5      $ r  )rI  rr  s    r>   r|  !Source.__init__.<locals>.<lambda>  s
    uaSzr@   r   F)	r/   r0   r   r  	char_typedecoder3   rY  rH  )r;   r   s     r>   r:   Source.__init__  sN    fc"" K DN --	2DK1DN!3Q<r@   c                 t   U R                   nU R                  n U R                  (       aD  U(       d=   X#   R                  5       (       a  US-  nOX#   S:X  a  UR                  " SU5      nOOM<  X#   nUS-   U l        U$ ! [
         a    X0l        US S s $ [         a    [        U5      U l        US S s $ f = f)Nr.   rN  r,   r   )r   r3   rY  isspacerU  rT  r6  re   )r;   override_ignorer   r3   r   s        r>   r   
Source.get  s    hh	   {**,,q+$ll45  BQwDHI 	 H3Q< 	 6{DH3Q<	 s   A$A? ?B7B76B7c                 Z   U R                   nU R                  n U R                  (       a  / n[        U5      U:  af   X#   R	                  5       (       a  US-  nOX#   S:X  a  UR
                  " SU5      nOOM<  UR                  X#   5        US-  n[        U5      U:  a  Mf  SR                  U5      nOX#X1-    nU[        U5      -  nX0l        U$ ! [         a$    [        U5      U l        SR                  W5      s $ [         a$    [        U5      U l        SR                  W5      s $ f = fNr.   rN  r,   ro   )
r   r3   rY  re   r3  rU  rb   rd   rT  r6  )r;   r4   r   r3   	substrings        r>   get_manySource.get_many  s   hh 	&  	)nu,!;..001HC#[C/"(,,tS"9C!  $$V[11HC )nu, GGI.	"5	s9~%H 	&6{DH779%% 	&6{DH779%%	&s   BC "-C +D*=*D*)D*c                    U R                   nU R                  nU R                  (       a  U(       d{   / n XE   R                  5       (       a  US-  nOAXE   S:X  a  UR                  " SU5      nO%XE   U;   U:X  a  UR                  XE   5        US-  nOOM`  XPl        SR                  W5      $  XE   U;   U:X  a  US-  nXE   U;   U:X  a  M  X@R                  U nXPl        U$ ! [         a    [        U5      U l         Na[         a    [        U5      U l         N|f = f! [         a    X@R                  U nXPl        Us $ f = fr7  )
r   r3   rY  r3  rU  rb   rT  re   r6  rd   )r;   test_setrT  r  r   r3   r8  s          r>   rG  Source.get_while  sI   hh['	{**,,q+$ll45 +1g=!((5q   779%%!{h.7:1HC {h.7: #88c2	  #  'v; 'v;'  !"88c2	  !s0   A)C  -D 
D  D<DD D>=D>c                    U R                   nU R                  n U R                  (       aN   X4   R                  5       (       a  US-  nO.X4   S:X  a  UR                  " SU5      nOX4   U;   U:X  a  US-  nOOMM  X4   U;   U:X  a  US-  nX4   U;   U:X  a  M  X@l        g ! [
         a    [        U5      U l         g [         a    [        U5      U l         g f = f)Nr.   rN  r,   )r   r3   rY  r3  rU  rT  re   r6  )r;   r<  rT  r   r3   s        r>   
skip_whileSource.skip_while  s    hh	#  {**,,q+$ll45 +1g=q  {h.7:1HC {h.7: H 	#6{DH 	#6{DH	#s   A:B B C9CCc                    U R                   nU R                  nU R                  (       a]   U HO  n X#   R                  5       (       a  US-  nOX#   S:X  a  UR                  " SU5      nOOM<  X#   U:w  a    gUS-  nMQ     X0l        gUR                  " X5      (       d  gU[        U5      -   U l        g! [
         a     g[         a     gf = f)NTr.   rN  r,   F)	r   r3   rY  r3  rU  rT  r6  r>  re   )r;   r8  r   r3   r   s        r>   r   Source.match3  s    hh"A!;..001HC#[C/"(,,tS"9C!  {a'$1HC #   $$Y44S^+DH   s   AB3 7B3 3
C?	C
Cc                     U R                  U5      (       d0  [        SR                  U5      U R                  U R                  5      eg )Nz
missing {})r   r&   r8   r   r3   )r;   r8  s     r>   rX  Source.expectZ  s8    zz)$$++I6TXXNN %r@   c                 "   U R                   nU R                  n U R                  (       a=   X   R                  5       (       a  US-  nOX   S:X  a  UR                  " SU5      nOOM<  U[        U5      :  $ ! [         a     g[         a     gf = f)NTr.   rN  r,   )r   r3   rY  r3  rU  re   rT  r6  )r;   r   r3   s      r>   at_endSource.at_end^  s    hh	  {**,,q+$ll45  #f+%% 	 		s   AA6 6
B	BB)r/  rY  r3   rH  r   Nr  )r.   )TFr  )rA   rB   rC   rD   rE   r:   r   r9  rG  r?  r   rX  rF  rF   rG   r@   r>   r+  r+    s1    7
  8$&L.!`#:%NOr@   r+  c                   >    \ rS rSrSrSS0 4S jrS
S jrS rS rS	r	g)Infoit  z"Info about the regular expression.r   Nc                     U[         U[        -  =(       d    [           -  nXl        Xl        SU l        X0l        SU l        0 U l        0 U l	        X l
        0 U l        / U l        0 U l        0 U l        / U l        0 U l        g )NFr   )DEFAULT_FLAGSr  r  r   r  r  r  r~  r  
group_namer/  r!  open_groupsr  r  r  r  )r;   r   r/  r  s       r>   r:   Info.__init__w  s     5I/JJ
!"" " "  r@   c                 
   U R                   R                  U5      nUce   U =R                  S-  sl        Ub  U R                  U R                  ;  a  OM5  U R                  nU(       a  X R                   U'   XR                  U'   X R                  ;   a)  [        U R                  5      S-   * nX R                  U'   UnU R                  R                  U5        U R                  R                  US5      S-   U R                  U'   U$ rY  )	r  r   r~  rL  rM  re   r  rb   r  )r;   r   rg  group_aliass       r>   rW  Info.open_group  s      $$T*=  A% <4#3#34??#J 
 $$E).  &)-&$$$   3 34q89K/4,E&'+'<'<'@'@'JQ'Ne$r@   c                 8    U R                   R                  5         g r  )rM  r  r`  s    r>   rZ  Info.close_group  s    r@   c                     U R                   [        -  =(       d    [        nU[        :X  a  gUR	                  5       (       a  [        U5      nOU R                  R                  U5      nX0R                  ;   $ r  )	r   r  r  r!   r  r  r  r   rM  )r;   r   r  rg  s       r>   ro  Info.is_open_group  s[     ::-A/h<<>>IE$$((.E((((r@   )r/  r  r   r  r  r~  r  rL  r  r  r!  r  rM  r  r  )
rA   rB   rC   rD   rE   r:   rW  rZ  ro  rF   rG   r@   r>   rI  rI  t  s     ($r !&4)r@   rI  c                 
   0 n/ nU R                    H  u  pEnUR                  XV4nUR                  U5      nUc  UR                  S:X  a[  [        U R                  [
        -  5      n	[        U[        5      n
X4XV4:w  a&  UR                  [        [        U5      U5      XV45        O;U R                  UR                     nUS   nUSS XV4:w  a  UR                  XU45        [        U5      nXU'   Xl        M     X l        X0l        g)zcChecks whether the reverse and fuzzy features of the group calls match
the groups which they call.
Nr   r.   )r  rg  r   r   r   r   r/   r  rb   r  re   r  r  r  additional_groups)r   r  r  rW  callr   ri  r  r  revfuzdef_inforg  s                r>   _check_group_featuresr\    s	    I $ 0 0uzz7*mmC ;zzQ4::/0 /:'!11 &,,gc)nf.M.& '  ..tzz: AC>g%55 &,,ee-DEi.C cN9 !1< N.r@   c                     U R                  [        U[        -  5      5      u  p#U(       aD  SUl        U[        :  a  SnUR
                  nU[        -  (       d
  U[        ) -  nUR                  nOSnSnSnX%U4$ )z>Gets the required string and related info of a parsed pattern.Tr  r   rG   )r  r   r   r  r  r   r   r  )r  r   
req_offsetr  	req_flags	req_charss         r>   _get_required_stringra    s{     "55d57?6KLJ "J''	'!I..	
		)++r@   c                   $    \ rS rSrSS jrS rSrg)r'   i  c                 @   Xl         / nU H  u  pE[        U5      n[        X&R                  5      n[	        UR
                  [        -  5      Ul        [        Xg5      nUR                  5       (       d!  [        SUR                  UR                  5      eUR                  UR                  5       5        M     [        U5      n[        U5       V	V
s/ s H  u  p[!        XyS-   U
5      PM     nn	n
[#        U5      n[	        UR
                  [$        -  5      nUR'                  X{5      nUR)                  U5      n[+        UUR
                  5      u  pn[-        Xx5        UR.                  (       a!  [        SWR                  UR                  5      e[	        UR
                  [$        -  5      nUR1                  U5      [2        R4                  4/-   n[7        U5      nUR9                  5       (       d+   [;        XxR=                  U5      5      n[7        U5      nUU-   nUR
                  [@        -  =(       d    [B        nUS[D        [F        4;  a  [I        S5      e[J        R0                  " S U[L        -  U-  U0 0 0 / XU[O        U5      5      U l(        g s  sn
n	f ! [>         a     Nf = f)Nzunbalanced parenthesisr.   z(recursive regex not supported by Scannerr   z5VERSION0 and VERSION1 flags are mutually incompatible))lexiconr+  rI  r/  r   r   r%   rY  r   rF  r&   r   r3   rb   ru  	enumerater  r   r   r   rr  ra  r\  r  r   r  SUCCESSr   r  r   r  rQ   r  r  r   r!   r6  r   r  re   scanner)r;   rd  r   patternsphraseactionr   r   r  r  ry   r   r^  r`  r_  r   fs_coder  s                     r>   r:   Scanner.__init__  sJ    %NFF^F//0D"&tzzG';"<F#F1F==??4fmm**  OOF2245 & E{6?6IJ6IdaE$Aq)6IJ! tzzG+,/''- ,@
**,(
y 	d+ >>BmmVZZ) ) tzzG+, ~~g&2::.)99 T"&&((+D2E2Eg2NO'0~
 ::-A/1h11TUU ~~dU\-AW,L
BB
y
h-c KF " s   J
,*J 
JJc                 z   / nUR                   nU R                  R                  U5      R                  nSn U" 5       nU(       d  OqUR                  5       nXW:X  a  O[U R                  UR
                  S-
     S   n[        US5      (       a  X`l        U" XR                  5       5      nUb  U" U5        UnM  X!US  4$ )Nr   r.   __call__)rb   rg  r   r  rd  	lastindexr   rg  )	r;   r   r(  rb   r   rx   ri   jrj  s	            r>   scanScanner.scan;  s    $$V,22AAv\\!++/215Fvz**
ggi0!vA  ac|##r@   )rd  r   rg  N)r   )rA   rB   rC   rD   r:   rq  rF   rG   r@   r>   r'   r'     s    GR$r@   r'   r~  r,   	)rt   ru   rw   nrz   trL  DigitTBlankSpaceWord)r:  r   hr{   r   r}   r"   )r   ru   r   Kri   r   Z)ru   r   ri   r   )FAILr   r$  r  )   r  r  r  )enumr   r  collectionsr   regex._regexr   __all__r9   r&   rI   rN   rQ   IntFlagr(   globalsr   __members__r!   r  r   r  r   r   r   r   r   rK  r   r	   r   r   r   r  r   r   r   r#   r%   SCOPED_FLAGS	frozensetascii_lettersr*  r7  r.  r  	octdigitsr  	hexdigitsr  r   r  r  r  get_code_sizeBYTES_PER_CODEBITS_PER_CODEr  r  r   r   r  r  rc  r  OPCODESr   r  re  r"  rx   r  setattrr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r   r#  r&  r-  r+  r,  r'  rA  r$  r  r   r[  r\  rU  r]  ru  r^  r_  r`  ra  r  r  r  rb  r  rV  r  r  r  r   r  r  r  r  r  r  r  r  r   r  r  r  r  r  r
  r  r  r  r)  r/  r   r:  r=  r  rK  rE  rG  rF  r  r  r  r  r  r	  r  r  r[  r]  r  r   r   r   r|  r  r   r  r  r   rv  r  r  r   r   r   r)  r   r   r0  r3  r  r  r^  r  r  r  r  r  rr  rz  r  r<  r#  r  r   r  r   rv  r  r  r   r   r  r   r   r   r  r  r   r   r+  rI  r\  ra  r'   get_propertiesr;  r  r  r  r@  r  r   r   prop_valuesr@  re   val_namerB  r  r  r  dictr  rd  rG   r@   r>   <module>r     s       # *I *>	y 		 		Y 	1 1f 	  && '8#') 1h1 	)E1L@5H	
:%	1F:TAGK 	&&&'	6==	!v''(
v''(
*+io=)D/)Yw// 
" %%'" -1$	 	8YUG88$	 
"
	
J&n, a1j*."  AA&Rj	 	 [w}}'EArBA (0.d+;6>>LC=Rh@5 ))<4 <01;z
A6
H4$X*t"?H"
4)FV(
$	'' "!@F5
&2.2G5R4B* .	1'2 1*,4!#! !.')R$LL	%*E /557806689D?LF'P
$"** 

g.R%:Hb%'	C& C&LI 6) &S 3 6<Y 6<p} F9Y F9P,	 ,\!i !H	 HTW) Wr"m "%} %' '  - $m $& &  m  C%I C%Jy + +Z'9 Z'x2| 2<PI Pd=  B BHS&I S&j"i "2y 2hM KI KZ/y /b= Sy Sjgi gR"g "4"w "<" "B@"w @"D= - !; !!M !- 5Y 5n'f '' 'R\ \|?) ?)B%/N,*^$ ^$B ""$
 $.$4$4$6 I &**7RH=D+tYC(D"K/N7"LLN&!+//&""=xF + %7 
						  
w	-	w	.	w	-	w	-	w	.	vt	,	vu	- 
		%				  -.    									  I	WF		r@   