
    ^h5                    D   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/S0S1.rYS2 rZS3 r[S4 r\S5 r]S6 r^S7 r_S8 r`S9 raS: rbS; rcS< rdS= reS> rfS? rgS@ rhSA riSB rjSC rkSD rlSE rmSF rnSG roSH rpSI rqSJ rrSK rsSL rtSM ruSSN jrvSO rwSP rxSQ rySR rzSS r{ST r|SU r}SV r~SW rSX rSY rSZ rS[ rS\ rS] rS^ rS_ rS` rSa rSb rSc rSd rSe rSf r\" SgR                  5       5      r\" ShR                  5       5      rSSi jrSj rSk rSl rSm rSnrSrSrSrSrSorSrSpSqSr.r\<S\"Ss\S\=St0rSu r " Sv Sw5      r " Sx Sy\5      r " Sz 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 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.rSrSr\" SSS5      \" SSS%5      \" SSS5      \" SSS5      \" SSS%5      \" SSS5      \" SSS%5      S.r\" \5      r\R!                  \" SSS\S9\" SSS%\S9\" SSS\S9\" SSS%\S9\" SSS\S9\" SSS%\S9S.5        \" \5      r\R!                  \" SSS\S9\" SSS%\S9\" SSS\S9\" SSS%\S9\" SSS\S9\" SSS%\S9S.5        \" 5       \" 5       \" S%5      \" 5       \" 5       \" 5       \" 5       S.r\" \5      r\R!                  \" \S9\" S%\S9\" \S9\" \S9S.5        \" \5      r\R!                  \" \S9\" S%\S9\" \S9\" \S9S.5        \" \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        K/home/james-whalen/.local/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(       a  [	        U[
        5      (       a  / $ UR                  U5      $ )z&Compiles the firstset for the pattern.)boolr   r   _check_firstsetr/   AnyAllcompile)r   fsreverses      r>   _compile_firstsetr   O  sF    4::'(G		+B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   r   r#   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   r2  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@  r1  r3  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>   rB  rB    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<  =!rK  >)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_subpatternrH  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<  rM  rN  rK  T)allow_numericcannot refer to an open grouprR  unknown extension)r3   r   rW  rX  rY  r   r   r   r%   rZ  r[  r  is_open_groupr&   r   r   rb  )r   r   r   r   r   rh  ri  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.TrN  r   N)r3   r   rY  )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.rN  )r   r   rY  r   r%   rZ  
LookAround)r   r   behindr   ri  r  s         r>   rV  rV    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  rJ  FrK  r<  Tzexpected lookaround conditionalrN  r^   )r   r3   r   parse_lookaround_conditionalr&   r   rW  rY  r   r   r   r   r%   rZ  r  Conditional)r   r   ri  r   r   rh  
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)NrN  r^   )
r   r   rY  r   r%   rZ  r   r   r   LookAroundConditional)r   r   rt  r   ri  r  rx  ry  s           r>   rv  rv    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.rN  )r   r   rY  r   r%   rZ  Atomic)r   r   ri  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^   rN  r.   r   )group_countr   r   rb   rA  rY  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   rP  rN  )rH  r/  rY  	CallGroup)r   r   r   r3   rh  s        r>   ra  ra    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.rN  )rW  rY  r  )r   r   r3   rh  s       r>   rb  rb  &  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                    UR                   nUR                   U-  U) -  Ul         UR                   [        [        -  [        -  -  (       a  UR                   [        ) -  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.rN  )
r   r   r   r   r   r   r%   rZ  r   rY  )r   r   r  r  ri  r  s         r>   parse_subpatternr  N  s    **K**x'I:5DJ zzUV^g-.jjN?2h>
tzzG34F9#F1
c 
"4::#78 !
"4::#78s   	C )C7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"  rN  Nro  )
r  GLOBAL_FLAGSr&   r   r3   global_flagsrI   r   r  parse_positional_flags)r   r   r  r  new_global_flagss        r>   rc  rc  a  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%   rZ  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.rS  FrT  zmissing group namer   r.   zbad character in group name)rH  r   r&   r   r3   isdigitr   isidentifier)r   rm  allow_group_0r   	min_groups        r>   rW  rW    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                    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[.        ;   Ga}  U(       d  UR0                  [2        -  (       a  [4        R                  U5      nOqUR0                  [6        -  (       a  [8        R                  U5      nOCUR0                  [        -  (       a  [:        R                  U5      nO[<        R                  U5      nU(       a  U$ UR0                  [6        -  (       a  [>        R                  U5      nOCUR0                  [        -  (       a  [@        R                  U5      nO[B        R                  U5      nU(       a  U$ [D        R                  U5      nU(       a  [+        [        U5      5      $ [        SU-  U R                  U R                  5      eU[F        ;   a  [I        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)%rZ  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_ESCAPESr   ASCII_POSITION_ESCAPESUNICODE_POSITION_ESCAPESPOSITION_ESCAPESASCII_CHARSET_ESCAPESUNICODE_CHARSET_ESCAPESCHARSET_ESCAPESCHARACTER_ESCAPESr/  parse_numeric_escape)	r   r   r   saved_ignorer   r   charsetr   rf   s	            r>   r   r     s   &&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e#.2226g%044R8(,,R0::)--b1EZZ'!+//3E#''+EL!%%b)SZ((%*FMM6::FF	v#F"== dCGV44A  	#"J	# dCGV44&Ds   
L5 M!5MM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.rP       rX   rn  )parse_octal_escaper3   r   r/  r  r  r   r   r   r   r   r   rp  r&   r   r   )	r   r   r   r   r8  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   r7  r&   r   )r   r   r8  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   r7  )r   r   escexpected_lenr   typer   r8  rx   r   rf   s              r>   r  r  1  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<  TrM  rn  )rY  r3   rW  rp  r&   r   r   )r   r   r   r   s       r>   r  r  H  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<  TrM  zundefined named list)rY  rW  kwargsr&   r   r3   r   )r   r   r   s      r>   r  r  S  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   rH  NAMED_CHAR_PARTunicodedatalookupr   r   r   r&   r   )r   r   r   r   r   rf   s         r>   r  r  ]  s    

I||CTB<<#**40%dCJ??
 J$C&11  6** s   +B ,Cc                 z   U R                   nU R                  5       nUS:X  a  U R                  S5      n[        U 5      u  pxU R                  S5      (       aZ  UR                  [
        -  (       a  [        n	O!UR                  [        -  (       a  [        n	OSn	[        XxX&:g  U U	S9n
[        XU5      $ OdU(       a]  US;   aW  UR                  [
        -  (       a  [        n	O!UR                  [        -  (       a  [        n	OSn	[        SXRX	S9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  r   r  CLMNPSZNry   r   )r3   r   r   parse_property_namer   r   ASCII_ENCODINGr   UNICODE_ENCODINGlookup_propertyr   r   r   )r   r   r   r   r   r   negate	prop_namer   r  r   s              r>   r  r  m  s   

I	B	Syc"-f5	<<zzE!)g%+"9H4F!D V44  
i::%HZZ'!'HHtR6M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)rH  PROPERTY_NAME_PARTr3   r   ALNUMr   strip)r   r   r   r   r  s        r>   r  r    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_VERSIONrZ  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  O  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"  X  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"  floatr7  r8   endswith)numericsignpartsr&  r%  results         r>   numeric_to_rationalr1  c  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   		)r1  rd   r7  ZeroDivisionErrorupper)r   s    r>   standardise_namer7  x  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                    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  pxUR	                  U5      n	U	c3  U(       d  [        S5      e[        SUR                  UR                  5      e[        US-  U	-  X%S	9$ S
 H@  n [        R	                  U 5      u  pxUR	                  U5      n	U	c  M0  [        US-  U	-  X%S	9s  $    [        R	                  U5      nU(       a:  Uu  px[        U5      [        :X  a  [        US-  S-  X%S	9$ [        US-  U(       + US	9$ UR                  S5      (       a9  [        R	                  USS 5      nU(       a  Uu  pxSU;   a  [        US-  S-  X%S	9$ S H]  u  pUR                  U
5      (       d  M  [        R	                  U 5      u  pxUR	                  USS 5      n	U	c  MM  [        US-  U	-  X%S	9s  $    U(       d  [        S5      e[        SUR                  UR                  5      e)zLooks up a property.N)GENERALCATEGORYASSIGNEDr9  
UNASSIGNEDr   zunknown propertyzunknown property valuerY   r  )GCSCRIPTBLOCKr.   ISrV   YES))r?  r=  )INr>  )r7  r6  _POSIX_CLASSES
PROPERTIESr   r&   r   r3   Propertyr   _BINARY_VALUES
startswith)propertyrf   r   r   r  r  r   prop_id
value_dictval_idprefixs              r>   r  r    sY    .6)4HU#E;;$5|\X%++->"A%~~h'.//*FMM6::FF"&>4550&--LLB&0(NN .(nnX6&W]f4hRR	 . >>% D"z?n,W]a/MM28|hGG ~~eACk*"&G
"B! 3XQQ @F##",..":G^^E!#K0F!B& 8(VV @ &''
"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  rP  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  r8  r   s           r>   _compile_replacementrS    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  r8  rx   r   s         r>   rM  rM    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   rH  r+  r   r  r  r   r   r&   r   )r   r   r   rf   s       r>   rO  rO    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<  TrM  r   invalid group referenceunknown group)rY  rW  r  r   groupsr&   r   r3   
groupindexr   
IndexError)r   r2   r   indexs       r>   rN  rN  .  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_sequencerc  O  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)	RegexBaseiU  c                 &    U R                   U l        g r  )ra   _keyr;   s    r>   r:   RegexBase.__init__V  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_flagsY  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_groupsm  s    r@   c                     U $ r  rG   r;   r   r   s      r>   r   RegexBase.optimisep      r@   c                     U $ r  rG   r;   r   s     r>   pack_charactersRegexBase.pack_characterss  rw  r@   c                     U $ r  rG   rh  s    r>   remove_capturesRegexBase.remove_capturesv  rw  r@   c                     gNTrG   rh  s    r>   	is_atomicRegexBase.is_atomicy      r@   c                     gr  rG   rh  s    r>   can_be_affixRegexBase.can_be_affix|  r  r@   c                     gNFrG   rh  s    r>   contains_groupRegexBase.contains_group      r@   c                     [        5       er  )rQ   r;   r   s     r>   get_firstsetRegexBase.get_firstset  s    r@   c                     gr  rG   rh  s    r>   has_simple_startRegexBase.has_simple_start  r  r@   c                 $    U R                  X5      $ r  )_compiler;   r   rq  s      r>   r   RegexBase.compile  s    }}W,,r@   c                     gr  rG   rh  s    r>   r  RegexBase.is_empty  r  r@   c                 ,    [        U R                  5      $ r  )hashrg  rh  s    r>   __hash__RegexBase.__hash__  s    DIIr@   c                 n    [        U 5      [        U5      L =(       a    U R                  UR                  :H  $ r  )r  rg  r;   others     r>   __eq__RegexBase.__eq__  s'    DzT%[(DTYY%**-DDr@   c                 .    U R                  U5      (       + $ r  )r  r  s     r>   __ne__RegexBase.__ne__  s    ;;u%%%r@   c                 &    U R                  5       S 4$ r  	max_widthr  s     r>   get_required_stringRegexBase.get_required_string      ~~%%r@   )rg  )NNNFF)rA   rB   rC   rD   r:   r   rr  r   rz  r}  r  r  r  r  r  r   r  r  r  r  r  rF   rG   r@   r>   re  re  U  sX    #=(-E&&r@   re  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        X l        U R
                  U R                  4U l        g r  )re  r:   r   r   r  ra   rg  )r;   r   r  s      r>   r:   ZeroWidthBase.__init__  s4    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X0R                  [
        -  -  nU R                  U4/$ Nr   )r   POSITIVE_OPFUZZY_OP
REVERSE_OPr  ENCODING_OP_SHIFT_opcoder;   r   rq  r   s       r>   r  ZeroWidthBase._compile  sV    ==[ EXEZE"333u%&&r@   c           	          [        SR                  [        U-  U R                  [        U R
                     SS/U R                     5      5        g )N	{}{} {}{}ro    ASCII)printr8   INDENT_op_namePOS_TEXTr   r  r;   indentr   s      r>   dumpZeroWidthBase.dump  s@    k  &$--
4==
!B>$--#@B 	Cr@   c                     gr  rG   rh  s    r>   r  ZeroWidthBase.max_width      r@   )rg  r  r   N)Tr   )
rA   rB   rC   rD   r:   r  r  r  r  rF   rG   r@   r>   r  r    s    2	'C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  r_  ANYc                     gr  rG   rh  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   rh  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                   P    \ rS rSr\R
                  \R                  S.rSrS r	Sr
g)r   i  r_  ANY_ALLc                 h    SU l         SU l        SU l        U R                  U R                   4U l        g )NTFr   )r   r   r   ra   rg  rh  s    r>   r:   AnyAll.__init__  s+    NNDMM1	r@   )rg  r   r   r   N)rA   rB   rC   rD   r  r  ANY_ALL_REVr  r  r:   rF   rG   r@   r>   r   r     s    jj7GH2r@   r   c                   J    \ rS rSr\R
                  \R                  S.rSrSr	g)r   i  r_  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  )re  r:   r  )r;   r  s     r>   r:   Atomic.__init__  s    4 $r@   c                 <    U R                   R                  XU5        g r  r  rr  rp  s       r>   rr  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  ru  s      r>   r   Atomic.optimise  s:    //224A??##%%??"r@   c                 F    U R                   R                  U5      U l         U $ r  r  rz  ry  s     r>   rz  Atomic.pack_characters      //99$?r@   c                 D    U R                   R                  5       U l         U $ r  r  r}  rh  s    r>   r}  Atomic.remove_captures      //99;r@   c                 6    U R                   R                  5       $ r  r  r  rh  s    r>   r  Atomic.can_be_affix      ++--r@   c                 6    U R                   R                  5       $ r  r  r  rh  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  rh  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  rh  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  rh  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:   rr  r   rz  r}  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  )re  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   rr  )r;   r2   r   rq  ru   s        r>   rr  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      $ ra  )r   r   r   _flatten_branches_split_common_suffix_split_common_prefix_reduce_to_setre   _add_precheckrb   insertrc  )r;   r   r   r   suffixrK  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_precheckB  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   rz  )r;   r   ru   s      r>   rz  Branch.pack_charactersQ  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   r}  )r;   ru   s     r>   r}  Branch.remove_capturesU  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  r  r  ru   s     r>   r  #Branch.is_atomic.<locals>.<genexpr>Z       8-Q;;==-   r  r   rh  s    r>   r  Branch.is_atomicY      8$--888r@   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  )r  r8  s     r>   r  &Branch.can_be_affix.<locals>.<genexpr>]  s     ;]>>##]r;  r<  rh  s    r>   r  Branch.can_be_affix\  s    ;T]];;;r@   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  r8  s     r>   r  (Branch.contains_group.<locals>.<genexpr>`  s     =}!##%%}r;  )r  r   rh  s    r>   r  Branch.contains_group_  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_firstsetb  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   rq  r   ru   s        r>   r  Branch._compilei  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.dumpv  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_branches}  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>       51A   r   c              3   :   >#    U  H  nUT   TT   :H  v   M     g 7fr  rG   )r  rt   r3   rK  s     r>   r  rY    ,      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  rY    s*      ( IJ(9(9!U(C(C   #&
r/   r   rb   r  minr  r  r   r   rc  )r   r   alternativesru   r
  end_posrS  rt   r4   r3   rK  s           @@@r>   r"  Branch._split_common_prefix  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  rW  rX  s     r>   r  .Branch._split_common_suffix.<locals>.<genexpr>  rZ  r[  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  rj    r]  r^  r.   c              3   P   >#    U  H  n[         R                  UT5      v   M     g 7fr  )r   _can_split_revra  s     r>   r  rj    s*      ( MN(=(=a(G(Grb  rc  )r   r   re  ru   r
  rf  rS  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>   r`  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   rp  rq  )r  r4   r  s      r>   rm  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orderrS  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>   rv  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   rD  SetBaser   r   _flush_set_membersr   r   rb   )r   r   r   rS  r  r   ru   s          r>   r#  Branch._reduce_to_set1	  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   )pairrz  s    r>   <lambda>+Branch._flush_char_prefix.<locals>.<lambda>S	  s    
Q.r@   keyr.   r   FT)
sortedr  re   rb   rc  r   r   r   r   r   )r   r   ry  rz  rS  rf   r   subbranchesoptionalru   r   s      `       r>   rx  Branch._flush_char_prefixM	  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   rS  r   s         r>   r  Branch._flush_set_membersg	  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>   rp  Branch._is_full_casev	  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>	  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>   rq  Branch._is_folded	  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  r8  s     r>   r  "Branch.is_empty.<locals>.<genexpr>	  s     7A::<<r;  r<  rh  s    r>   r  Branch.is_empty	  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__	  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  r8  s     r>   r  #Branch.max_width.<locals>.<genexpr>	  r:  r;  )rA  r   rh  s    r>   r  Branch.max_width	  r>  r@   )r   N)!rA   rB   rC   rD   r:   rr  r   r$  rz  r}  r  r  r  r  r  r  staticmethodr   r"  r!  r`  rm  r{  rv  r#  rx  r  rp  rq  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  i	  c                     [         R                  U 5        Xl        X l        X0l        U R
                  U R                  4U l        g r  )re  r:   r   rh  r   ra   rg  )r;   r   rh  r   s       r>   r:   CallGroup.__init__	  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)NrX  r   rY  r.   zambiguous group reference)r   rh  r7  r   group_indexr   r&   r   r  open_group_countgroup_callsrb   ra   rg  rp  s       r>   rr  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   rh  s    r>   r}  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  rh  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  rh  r  s     r>   r  CallGroup.__eq__	  '    DzT%[(FTZZ5;;-FFr@   c                     [         $ r  r  rh  s    r>   r  CallGroup.max_width	      r@   c                     S U l         g r  r   rh  s    r>   __del__CallGroup.__del__	  	    	r@   )rg  rh  r   r   N)rA   rB   rC   rD   r:   rr  r}  r  r  r  r  r  rF   rG   r@   r>   r  r  	  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  )re  r:   rf   r   r   rk  r   r   r  r   r   r  r  r  ra   rg  )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   rm  s       r>   rl  Character.rebuild	  s    X9EEr@   c                     U $ r  rG   r;   r   r   r   s       r>   r   Character.optimise	  rw  r@   c                     [        U /5      $ r  r  r  s     r>   r  Character.get_firstset	  r  r@   c                     gr  rG   rh  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   rq  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  rh  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{r[  r   )r   r   r  folded_charactersr  s     r>   r  Character.get_required_string
  s,    }}!&&Ct{{&C!C$wr@   )rg  r   r  r  r   rf   r   NF)rA   rB   rC   rD   r   r  	CHARACTERr   CHARACTER_IGNr   r  CHARACTER_REVCHARACTER_IGN_REVr  r:   rl  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)rw  i
  c                 j    [         R                  U 5        Xl        X l        X0l        X@l        XPl        g r  )re  r:   r   rh  yes_itemno_itemr   )r;   r   rh  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   rY  rX  )r   rh  r7  r   r  r   r&   r   r  r  rr  r   rp  s       r>   rr  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   rw  rh  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  rz  r   ry  s     r>   rz  Conditional.pack_charactersB
  s3    55d;||33D9r@   c                     U R                   R                  5       U l         U R                  R                  5       U l        g r  )r  r}  r   rh  s    r>   r}  Conditional.remove_capturesG
  s*    557||335r@   c                 x    U R                   R                  5       =(       a    U R                  R                  5       $ r  )r  r  r   rh  s    r>   r  Conditional.is_atomicK
  s'    }}&&(ET\\-C-C-EEr@   c                 x    U R                   R                  5       =(       a    U R                  R                  5       $ r  )r  r  r   rh  s    r>   r  Conditional.can_be_affixN
  s'    }}))+K0I0I0KKr@   c                 x    U R                   R                  5       =(       d    U R                  R                  5       $ r  )r  r  r   rh  s    r>   r  Conditional.contains_groupQ
  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_firstsetT
  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_EXISTSrh  r   r  r   r   rb   rM  r  r;   r   rq  r   add_codes        r>   r  Conditional._compileX
  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.   rP  )r  r8   r  rh  r  r  r   r  r  s      r>   r  Conditional.dumpd
  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   rh  s    r>   r  Conditional.is_emptyk
  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  rh  r  r   r  s     r>   r  Conditional.__eq__n
  sR    DzT%[( Hdjj$--
,,.!KKG.H 	Hr@   c                 z    [        U R                  R                  5       U R                  R                  5       5      $ r  rA  r  r  r   rh  s    r>   r  Conditional.max_widthr
  )    4==**,dll.D.D.FGGr@   c                     S U l         g r  r  rh  s    r>   r  Conditional.__del__u
  r  r@   )rh  r   r   r   r  N)rA   rB   rC   rD   r:   rr  r   rz  r}  r  r  r  r  r  r  r  r  r  r  rF   rG   r@   r>   rw  rw  
  sT    !9(O
6FLO.
3DHHr@   rw  c                   0    \ rS rSr\R
                  rSrSrg)DefaultBoundaryix
  DEFAULT_BOUNDARYrG   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)DefaultEndOfWordi|
  DEFAULT_END_OF_WORDrG   N)	rA   rB   rC   rD   r  r)  r  r  rF   rG   r@   r>   r(  r(  |
  s    $$G$Hr@   r(  c                   0    \ rS rSr\R
                  rSrSrg)DefaultStartOfWordi
  DEFAULT_START_OF_WORDrG   N)	rA   rB   rC   rD   r  r,  r  r  rF   rG   r@   r>   r+  r+  
  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  r1  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)EndOfStringi
  END_OF_STRINGrG   N)	rA   rB   rC   rD   r  r5  r  r  rF   rG   r@   r>   r4  r4  
  r2  r@   r4  c                   0    \ rS rSr\R
                  rSrSrg)r   i
  END_OF_STRING_LINErG   N)	rA   rB   rC   rD   r  r7  r  r  rF   rG   r@   r>   r   r   
  s    ##G#Hr@   r   c                   0    \ rS rSr\R
                  rSrSrg)r   i
  END_OF_STRING_LINE_UrG   N)	rA   rB   rC   rD   r  r9  r  r  rF   rG   r@   r>   r   r   
  s    %%G%Hr@   r   c                   0    \ rS rSr\R
                  rSrSrg)	EndOfWordi
  END_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rS rSrg)Failurei
  FAILUREc                 &    [         R                  4/$ r  )r  r?  r  s      r>   r  Failure._compile
  s    r@   rG   NrA   rB   rC   rD   r  r  rF   rG   r@   r>   r>  r>  
  s    H 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rg)r  i
  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@  rD  r  )r   r   rv   r   r.   )drx   r{   rA  )re  r:   r  r   rw  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 r  r  rp  s       r>   rr  Fuzzy.fix_groups
  s    ""7T:r@   c                 F    U R                   R                  U5      U l         U $ r  r  ry  s     r>   rz  Fuzzy.pack_characters
  r  r@   c                 D    U R                   R                  5       U l         U $ r  r  rh  s    r>   r}  Fuzzy.remove_captures
  r  r@   c                 6    U R                   R                  5       $ r  r  r  rh  s    r>   r  Fuzzy.is_atomic
  r  r@   c                 6    U R                   R                  5       $ r  r  rh  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.   rD  r@  rA  r#  T)r   rb   r  r  r   r  	FUZZY_EXTr   r   rM  r  r  FUZZY)r;   r   rq  	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 )NrV  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
  rh  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  rh  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  rA  z{}<={}r  r  )r   r8   rb   rd   )	r;   r   r   rd  rA  conr@  rE  limits	            r>   rZ  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:   rr  rz  r}  r  r  r  r  r  r  r  rZ  rF   rG   r@   r>   r  r  
  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   rq  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.dump0  s    l!!&6/23r@   c                     [         $ r  r  rh  s    r>   r  Grapheme.max_width3  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)ri  i6  c                 (    [         R                  S4/$ r  )r  GRAPHEME_BOUNDARYr  s      r>   r   GraphemeBoundary.compile7  s    %%q)**r@   rG   N)rA   rB   rC   rD   r   rF   rG   r@   r>   ri  ri  6  s    +r@   ri  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  )re  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  rp  s       r>   rr  GreedyRepeat.fix_groupsD  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.optimiseG  s/    __--d<
Dz*nndnnEEr@   c                 F    U R                   R                  U5      U l         U $ r  r  ry  s     r>   rz  GreedyRepeat.pack_charactersL  r  r@   c                 D    U R                   R                  5       U l         U $ r  r  rh  s    r>   r}  GreedyRepeat.remove_capturesP  r  r@   c                 v    U R                   U R                  :H  =(       a    U R                  R                  5       $ r  )r	  r
  r  r  rh  s    r>   r  GreedyRepeat.is_atomicT  s'    ~~/ODOO4M4M4OOr@   c                     gr  rG   rh  s    r>   r  GreedyRepeat.can_be_affixW  r  r@   c                 6    U R                   R                  5       $ r  r  rh  s    r>   r  GreedyRepeat.contains_groupZ  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_firstset]  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   rq  repeatr  s        r>   r  GreedyRepeat._compiled  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   re  s       r>   r  GreedyRepeat.dumpq  s^    >>!ENNEl!!&6/4==
..%! 	" 	VaZ1r@   c                 6    U R                   R                  5       $ r  r
  rh  s    r>   r  GreedyRepeat.is_empty{  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__~  sT    DzT%[( doot~~
...#..
//. 	r@   c                 v    U R                   c  [        $ U R                  R                  5       U R                   -  $ r  )r
  r  r  r  rh  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  rd  r  )r;   r   r
  r}   ofsreqs         r>   r   GreedyRepeat.get_required_string  s    !%!7IT^^	>>Q))+i7Aq)$d**??66w?8OOO%%')31i $&&r@   )r
  r	  r  N)rA   rB   rC   rD   r  ru  r  r  r:   rr  r   rz  r}  r  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  i  c                     gr  rG   rh  s    r>   r  PossessiveRepeat.is_atomic  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   rq  r  r  s        r>   r  PossessiveRepeat._compile  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   r  r  r  rF   rG   r@   r>   r  r    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  )re  r:   r   rh  r  r  )r;   r   rh  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_groupsrh  r  rr  rp  s       r>   rr  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   rh  r{  s       r>   r   Group.optimise  s-    __--d<
TYY

J77r@   c                 F    U R                   R                  U5      U l         U $ r  r  ry  s     r>   rz  Group.pack_characters  r  r@   c                 6    U R                   R                  5       $ r  r  rh  s    r>   r}  Group.remove_captures      ..00r@   c                 6    U R                   R                  5       $ r  rN  rh  s    r>   r  Group.is_atomic  r  r@   c                     gr  rG   rh  s    r>   r  Group.can_be_affix  r  r@   c                     gr  rG   rh  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  rh  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  )rh  r   private_groupsr  	call_refsr   r  r  GROUPr   r  r   r  )r;   r   rq  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.   )rh  r  r  r8   r  r  r  )r;   r  r   rh  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  rh  r  r  s     r>   r  Group.__eq__  sB    T
d5k) *tzz4??.K;;((
)/* 	+r@   c                 6    U R                   R                  5       $ r  r  rh  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  rh  s    r>   r  Group.__del__  r  r@   )r  rh  r   r  N)rA   rB   rC   rD   r:   rr  r   rz  r}  r  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)rs  i  AHEADBEHINDr_  c                 z    [         R                  U 5        [        U5      U l        [        U5      U l        X0l        g r  )re  r:   r   rt  r   r  )r;   rt  r   r  s       r>   r:   LookAround.__init__  s+    4 6lX$r@   c                 P    U R                   R                  XR                  U5        g r  )r  rr  rt  rp  s       r>   rr  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   rt  r   r  rs  r{  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  ry  s     r>   rz  LookAround.pack_characters!  r  r@   c                 6    U R                   R                  5       $ r  r  rh  s    r>   r}  LookAround.remove_captures%  r  r@   c                 6    U R                   R                  5       $ r  rN  rh  s    r>   r  LookAround.is_atomic(  r  r@   c                 6    U R                   R                  5       $ r  r  rh  s    r>   r  LookAround.can_be_affix+  r  r@   c                 6    U R                   R                  5       $ r  r  rh  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   rt  r  r  r   r  s     r>   r  LookAround.get_firstset1  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   rt  r  r   r  r  s       r>   r  LookAround._compile7  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_textrt  r  r   r  r  r  s      r>   r  LookAround.dumpC  sV    m""6F?
..
%x'>@ 	AVaZ5r@   c                 \    U R                   =(       a    U R                  R                  5       $ r  )r   r  r  rh  s    r>   r  LookAround.is_emptyH  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  rt  r   r  r  s     r>   r  LookAround.__eq__K  sT    DzT%[( Odkk4==
//.$||U^^U=M=MN.O 	Or@   c                     gr  rG   rh  s    r>   r  LookAround.max_widthO  r  r@   )rt  r   r  N)rA   rB   rC   rD   r  r:   rr  r   rz  r}  r  r  r  r  r  r  r  r  r  rF   rG   r@   r>   rs  rs    sU    x0I%@B1+.0
?6
<Or@   rs  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)r{  iR  r  r  r_  c                     [         R                  U 5        [        U5      U l        [        U5      U l        X0l        X@l        XPl        g r  )re  r:   r   rt  r   r  r  r   )r;   rt  r   r  r  r   s         r>   r:   LookAroundConditional.__init__U  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  rr  r  r   rp  s       r>   rr   LookAroundConditional.fix_groups]  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   rt  r  r   r{  r   )r;   r   r   r  r  r   s         r>   r   LookAroundConditional.optimiseb  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  rz  r  r   ry  s     r>   rz  %LookAroundConditional.pack_charactersj  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  r}  r  r   rh  s    r>   r}  %LookAroundConditional.remove_capturesp  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  r  r  r   rh  s    r>   r  LookAroundConditional.is_atomicu  s@    ))+ #0G0G0I #
,,
 
 
"	$r@   c                     U R                   R                  5       =(       a;    U R                  R                  5       =(       a    U R                  R                  5       $ r  )r  r  r  r   rh  s    r>   r  "LookAroundConditional.can_be_affixy  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   rh  s    r>   r  $LookAroundConditional.contains_group}  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   rt  r   r  r   rb   rM  r  r   r  r  s        r>   r  LookAroundConditional._compile  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{}EITHERrP  )r  r8   r  r  rt  r  r   r  r  r  r   r  r  s      r>   r  LookAroundConditional.dump  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   rh  s    r>   r  LookAroundConditional.is_empty  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__  sT    DzT%[( Mdoot}}
,,.!,,ennemmL.M 	Mr@   c                 z    [        U R                  R                  5       U R                  R                  5       5      $ r  r  rh  s    r>   r  LookAroundConditional.max_width  r!  r@   c                 &    U R                  5       S 4$ r  r  r  s     r>   r  )LookAroundConditional.get_required_string  r  r@   )rt  r   r   r  r  N)rA   rB   rC   rD   r  r:   rr  r   rz  r}  r  r  r  r  r  r  r  r  r  rF   rG   r@   r>   r{  r{  R  sU    x0I9
6
$+K3#MH&r@   r{  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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)rD  i  FTr   c                    [         R                  U 5        Xl        [        U5      U l        [
        U   U l        [        U5      U l        XPl        U R                  U R                  U R                  U R                  U R                  4U l
        g r  )re  r:   rf   r   r   rk  r   r   r  ra   rg  )r;   rf   r   r   r   r  s         r>   r:   Property.__init__  se    4 
X1*=i ^^TZZ
//4>>+	r@   c                 F    [        U R                  XUU R                  5      $ r  )rD  rf   r  rm  s       r>   rl  Property.rebuild  s     

H)
-- 	r@   c                     U $ r  rG   r  s       r>   r   Property.optimise  rw  r@   c                     [        U /5      $ r  r  r  s     r>   r  Property.get_firstset  r  r@   c                     gr  rG   rh  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X0R
                  [        -  -  nU R                  U R                  U4   X0R                  4/$ r  )
r   r  r   r  r  r  r  r  r   rf   r  s       r>   r  Property._compile  sl    ==[ E>>\!EXE"333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                     SS/U R                     5      5        g )NrY   r   r.   i  z{}PROPERTY {} {}:{}{}{}ro   r  )
PROPERTY_NAMESrf   r  r8   r  r  r   r  r   r  )r;   r  r   r   r   rf   s         r>   r  Property.dump  sw    djjB./1gtAwtzzF':;e'..v
4==
!4	$//0Jx.
') 	*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   rh  s    r>   r  Property.max_width  r  r@   )rg  r   r  r   rf   r   Nr  )rA   rB   rC   rD   r   r  PROPERTYr   PROPERTY_IGNr   r  PROPERTY_REVPROPERTY_IGN_REVr  r:   rl  r   r  r  r  r  r  r  rF   rG   r@   r>   rD  rD    s    j%-@oo%("++7Noo~rT8JHd+R__~
?  	"G (,
+	M*Jr@   rD  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   NrB  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  )re  r:   lowerr6  r   r   rk  r   r   ra   rg  )r;   r5  r6  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  r5  r6  rm  s       r>   rl  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  r5  r   r6  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   r5  r6  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  r5  r  r6  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  )r5  r6  r   r  s     r>   r  Range.matches3  s5    

b..DJJ.4==@@.4==@@r@   c                     gr  rG   rh  s    r>   r  Range.max_width6  r  r@   )rg  r   r5  r   r6  r   Nr  )rA   rB   rC   rD   r   r  r3  r   	RANGE_IGNr   r  	RANGE_REVRANGE_IGN_REVr  r  r:   rl  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   i9  FTc                     [         R                  U 5        Xl        X l        X0l        [
        U   U l        U R                  U R                  U R                  4U l        g r  )	re  r:   r   rh  r   rk  r   ra   rg  )r;   r   rh  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)NrY  r.   rX  )r   rh  r7  r   r  r   r&   r   r  ra   r   rg  rp  s       r>   rr  RefGroup.fix_groupsI  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  rh  s    r>   r}  RefGroup.remove_capturesW  r  r@   c                 v    SnU(       a	  U[         -  nU R                  U R                  U4   X0R                  4/$ r  )r  r  r   rh  r  s       r>   r  RefGroup._compileZ  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  rh  r  r   r  s      r>   r  RefGroup.dump`  s0     ''
DOO
$& 	'r@   c                     [         $ r  r  rh  s    r>   r  RefGroup.max_widthd  r  r@   c                     S U l         g r  r  rh  s    r>   r  RefGroup.__del__g  r  r@   )rg  r   rh  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:   rr  r}  r  r  r  r  rF   rG   r@   r>   r   r   9  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  ij  SEARCH_ANCHORrG   N)	rA   rB   rC   rD   r  r^  r  r  rF   rG   r@   r>   r  r  j  r2  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   in  Nc                 D    [         R                  U 5        Uc  / nXl        g r  )re  r:   r  )r;   r  s     r>   r:   Sequence.__init__o  s    4 =E
r@   c                 N    U R                    H  nUR                  XU5        M     g r  )r  rr  )r;   r2   r   rq  r{   s        r>   rr  Sequence.fix_groupsv  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   rc  )r;   r   r   r  r{   s        r>   r   Sequence.optimisez  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>  s$      +"  DE:dA+>+>    )r   r  r  r   r   r   r   r   rf   r   _flush_charactersrb   r  r,  r  r   r-  rz  rc  )r;   r   r  r-  r   r{   s    `    r>   rz  Sequence.pack_characters  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  r}  )r;   r{   s     r>   r}  Sequence.remove_captures  s-    37::>:a''):>
 ?r4  c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r7  r  r{   s     r>   r  %Sequence.is_atomic.<locals>.<genexpr>       5*Q;;==*r;  r  r  rh  s    r>   r  Sequence.is_atomic      5$**555r@   c                     gr  rG   rh  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  rE  rr  s     r>   r  *Sequence.contains_group.<locals>.<genexpr>  s     :z!##%%zr;  )r  r  rh  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  rh  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$ rK  )r  r   r   )r;   r   rq  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  rh  ri  s     r>   r  -Sequence._flush_characters.<locals>.<genexpr>  s     ?Jqz$**Jrk  r.   r   r   )r   r  r   r  r   _fix_full_casefoldr-  re   rb   r   r   r  )r   r-  r   r  literalsr   charss   `      r>   rl  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r[  r   r.   r   )r   r  r   r  rd   r5  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   sortrA  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;  ru  rh  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  rr  s     r>   r  %Sequence.max_width.<locals>.<genexpr>2  rt  r;  )sumr  rh  s    r>   r  Sequence.max_width1  rw  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   r  offsetr{   r  r  s          r>   r  Sequence.get_required_string4  s\    jjdd)CA,,W5HCMFs{"	  t|r@   rb  r  )rA   rB   rC   rD   r:   rr  r   rz  r}  r  r  r  r  r  r  r  r  rl  r  r  r  r  r  r  rF   rG   r@   r>   r   r   n  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)r  iC  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  )re  r:   r   r   r  r   r   rk  r   r   
char_widthra   rg  )r;   r   r  r   r   r   s         r>   r:   SetBase.__init__D  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   rm  s       r>   rl  SetBase.rebuildR  s4    Dz$))TZZ
Xdii/	0r@   c                     [        U /5      $ r  r  r  s     r>   r  SetBase.get_firstsetV  r  r@   c                     gr  rG   rh  s    r>   r  SetBase.has_simple_startY  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   rq  r   r   ri   s         r>   r  SetBase._compile\  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 )Nr  r.   )
r  r8   r  r  r  r   r  r   r  r  )r;   r  r   rx   s       r>   r  SetBase.dumpl  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 r  )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_foldingr  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  rW  )r  r  s     r>   r  $SetBase.max_width.<locals>.<genexpr>  s     2T63v;;Tr[  )r   r   r   r   r   r   r  r   r  r   r  r   r   r  r   rA  )r;   r  r  r   r  s        r>   r  SetBase.max_width  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  rh  s    r>   r  SetBase.__del__  r  r@   )rg  r   r  r   r  r   r   N)rA   rB   rC   rD   r   r:   rl  r  r  r  r  r  r  r  rF   rG   r@   r>   r  r  C  s7    -1f+0 (&<32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_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@   rb  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@   rb  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@   rb  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                 P   / nU R                    H  nUR                  XSS9n[        U[        5      (       a.  UR                  (       a  UR                  UR                   5        MV  [        U[        5      (       a  [        5       s  $ UR                  U5        M     [        5       [        5       4nU HX  n[        U[        5      (       d  M  XeR                     R                  UR                  UR                  UR                  45        MZ     US   US   -  (       a
  [        5       $ [        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   r   rb   r   rD  r   rf   r   r   re   r   r   r  )r;   r   r   r   r  ri   
propertiesrx   s           r>   r   SetUnion.optimise  sB   A

4
6A!X&&1::QWW%Av&&xQ  eSU^
A!X&&::&**AGGQ\\1;;+OP  a=:a=(8O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   rq  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>P  r  r  )r  r  r   r  s    ` r>   r  SetUnion.matchesO  r  r@   rb  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)SkipiS  SKIPrG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r  r  S  s    HggGr@   r  c                   0    \ rS rSr\R
                  rSrSrg)r   iW  START_OF_LINErG   N)	rA   rB   rC   rD   r  r  r  r  rF   rG   r@   r>   r   r   W  r2  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)StartOfWordic  START_OF_WORDrG   N)	rA   rB   rC   rD   r  r	  r  r  rF   rG   r@   r>   r  r  c  r2  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  ig  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>v  s     (@AQr[  F)r   r-  rk  r   r  r   r   r  r  r   r  requiredra   rg  )r;   r-  r   r  r   r  s         r>   r:   String.__init__n  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_firstset  s:    CCIdooc2__& ' ( 	(r@   c                     gr  rG   rh  s    r>   r  String.has_simple_start  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._compile  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r[  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  rh  s    r>   r  String.max_width  s    4))**r@   c                 
    SU 4$ r  rG   r  s     r>   r  String.get_required_string  s    $wr@   )rg  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  g  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,  i  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>  s     :/Q#a&&/r[  r  z{}LITERAL MATCH {}{})	rd   r-  r  r  r  r8   r  r  r   )r;   r  r   literalr  s        r>   r  Literal.dump  sX    '':$//::.''-$++FVOW
DOO
$& 	'r@   rG   N)rA   rB   rC   rD   r  rF   rG   r@   r>   r,  r,    s    'r@   r,  c                   ,    \ rS rSr\4S jrS rS rSrg)r   i  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   rk  r   ra   rg  set_keynamed_lists_usedre   r  r   r   r/   r0   r   rb   r   r  r   r   )r;   r   r   r   r]  r  r  
fold_flagschoicesr   r   choices               r>   r:   StringSet.__init__  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  rh  s    r>   r  StringSet.__del__  r  r@   )rg  r   r   r   r   r,  N)	rA   rB   rC   rD   r   r:   r  r  rF   rG   r@   r>   r   r     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  )rQ  r~  s    r>   r  !Source.__init__.<locals>.<lambda>  s
    uaSzr@   r   F)	r/   r0   r   r  	char_typedecoder3   rZ  rP  )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.   rO  r,   r   )r   r3   rZ  isspacer]  r\  r7  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.   rO  r,   ro   )
r   r3   rZ  re   r?  r]  rb   rd   r\  r7  )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rC  )
r   r3   rZ  r?  r]  rb   r\  re   r7  rd   )r;   test_setrU  r  r   r3   rD  s          r>   rH  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.   rO  r,   )r   r3   rZ  r?  r]  r\  re   r7  )r;   rH  rU  r   r3   s        r>   
skip_whileSource.skip_whileN  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.   rO  r,   F)	r   r3   rZ  r?  r]  r\  r7  rF  re   )r;   rD  r   r3   r   s        r>   r   Source.matchk  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;   rD  s     r>   rY  Source.expect  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.   rO  r,   )r   r3   rZ  r?  r]  re   r\  r7  )r;   r   r3   s      r>   at_endSource.at_end  s    hh	  {**,,q+$ll45  #f+%% 	 		s   AA6 6
B	BB)r;  rZ  r3   rP  r   Nr  )r.   )TF)T)rA   rB   rC   rD   rE   r:   r   rE  rH  rK  r   rY  rR  rF   rG   r@   r>   r7  r7    s1    7
  8$&L.!`#:%NOr@   r7  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)Infoi  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__  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$ ra  )	r  r   r  rY  rZ  re   r  rb   r  )r;   r   rh  group_aliass       r>   rX  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  )rZ  r  rh  s    r>   r[  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   rZ  )r;   r   r  rh  s       r>   rp  Info.is_open_group  s[     ::-A/h<<>>IE$$((.E((((r@   )r;  r  r   r  r  r  r  rY  r  r  r-  r  rZ  r  r  )
rA   rB   rC   rD   rE   r:   rX  r[  rp  rF   rG   r@   r>   rU  rU    s     ($r !&4)r@   rU  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  rh  r   r   r   r   r/   r  rb   r  re   r  r  r  additional_groups)r   r  r  rd  callr   rq  r  r  revfuzdef_inforh  s                r>   _check_group_featuresri    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_stringrn    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))lexiconr7  rU  r;  r   r   r%   rZ  r   rR  r&   r   r3   rb   r}  	enumerater  r   r   r   rz  rn  ri  r  r   r  SUCCESSr   r  r   r  rQ   r  r  r   r!   r7  r   r  re   scanner)r;   rq  r   patternsphraseactionr   r   r  r  ry   r   rk  rm  rl  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   rt  r   r  rq  	lastindexr   rh  )	r;   r   r0  rb   r   rx   ri   jrw  s	            r>   scanScanner.scans  s    $$V,22AAv\\!++/215Fvz**
ggi0!vA  ac|##r@   )rq  r   rt  N)r   )rA   rB   rC   rD   r:   r~  rF   rG   r@   r>   r'   r'   )  s    GR$r@   r'   r  r,   	)rt   ru   rw   nrz   trW  DigitTBlankSpaceWord)rE  r   hr{   r   r}   r"   r  )rE  r   r{   r   r}   r"   )r   ru   r   Kri   r   Z)ru   r   ri   r   )FAILr   r/  r  )r   r  r  rW  )enumr   r  collectionsr   regex._regexr   __all__r9   r&   rI   rN   rQ   IntFlagr(   globalsr   __members__r!   r  r   r  r   r   r   r   r   rX  r   r	   r   r   r   r  r   r   r   r#   r%   SCOPED_FLAGS	frozensetascii_lettersr+  r8  r/  r  	octdigitsr  	hexdigitsr  r   r  r  r  get_code_sizeBYTES_PER_CODEBITS_PER_CODEr  r  r   r   r  r  rk  r  OPCODESr   r  rr  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(  rB  r%  r  r   r\  r]  rV  r^  rv  r_  r`  ra  rb  r  r  r  rc  r  rW  r  r  r  r   r  r  r  r  r  r  r  r  r   r   r  r  r
  r  r  r  r  r"  r1  r7  r   rB  rE  r  rS  rM  rO  rN  r  r  r  r  r  r  r  r  r  rc  re  r  r   r   r   r}  r  r   r  r  r   rw  r%  r(  r+  r   r   r4  r   r   r;  r>  r  r  ri  r  r  r  r  r  rs  r{  r  rD  r.  r  r   r  r   r  r  r  r  r   r  r   r   r   r  r  r,  r   r7  rU  ri  rn  r'   get_propertiesrC  r"  r  r  rH  r  r   r   prop_valuesrA  re   val_namerJ  r  r  r  r  dictr  r  r  r  r  r  re  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Q5f4B* .	1'2 "1H,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 :) &	2S 	2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 "6y 6pM KI KZ/y /b= Sy Sjgi gR"g "4"w "<" "BL"w L"\= - !; !!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	- _-    	w~	F	w	G	w~	F	w	G	vtn	E	vu~	F  /    	w7G	H	w8H	I	w7G	H	w8H	I	vt6F	G	vu7G	H   
		%				  ./    	>	*	%.	1	n	-	N	+	    01    	+	,	%"2	3	.	/	,	-	!  -.    									  I	WF		r@   