
    1 j?                    r   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\R                  r\R                   r\R"                  r\R$                  r\R&                  r\R(                  r\R*                  r\R,                  r\R.                  r\R0                  r\R2                  r\R4                  r\R6                  r\R8                  r\R:                  r\R<                  r\R>                  r\R@                  r \RB                  r!\RD                  r"\RF                  r#\RH                  r$\RJ                  r%\RL                  r&\RN                  r'\RP                  r(\RR                  r)\RT                  r*\RV                  r+\RX                  r,\RZ                  r-\R\                  r.\R^                  r/\R`                  r0\r1\\-  r2\\-  \-  r3\S \\0r4\2\-  \-  \-  \-  \-  r5\\-  \-  \-  \-  \-  \3-  r6\7" \Rp                  5      r9\7" \Rt                  5      r;\9\;-  r<\7" \Rz                  5      r>\7" \R~                  5      r@\7" S5      \7" S/5      -  rA\<\7" S5      -  rB\<\7" S5      -  rCSrD\R                  " 5       rF\FS-  rGS\G-  S-
  rH\\\\\\\\\\\\\\\S.rI\\-  rJS rK\\-  rL\\L-  rMS S \S \\\L\L0rNSSSS.rOSrP " S S5      rQ\Q" 5       rR\S" \PR                  5       5       H  u  rUrV\W" \R\V\U5        M     SS jrXS rYS  rZS! r[S" r\S# r]S$ r^S% r_SS' jr`S( raS) rbS* rcS+ rdS, reS- rfS. rgS/ rhS0S1S2S3.riS4 rjS5 rkS6 rlS7 rmS8 rnS9 roS: rpS; rqS< rrS= rsS> rtS? ruS@ rvSA rwSB rxSC rySD rzSE r{SF r|SG r}SH r~SI rSJ rSK rSL rSM rSN rSO rSP rSSQ jrSR rSS rST rSU rSV rSW rSX rSY rSZ rS[ rS\ rS] rS^ rS_ rS` rSa rSb rSc rSd rSe rSf rSg rSh rSi r\" SjR                  5       5      r\" SkR                  5       5      rGS Sl jrSm rSn rSo rSp rSqrSrSrSrSrSrrSrSsStSu.r\KS\Sv\S\LSw0rSx r " Sy Sz5      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 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\GR                  \" SSS\S9\" SSS&\S9\" SSS\S9\" SSS&\S9\" SSS\S9\" SSS&\S9S.5        \" \5      Gr G\ G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       \" 5       S.Gr\" G\5      GrG\GR                  \" \S9\" S&\S9\" \S9\" \S9S.5        \" G\5      GrG\GR                  \" \S9\" S&\S9\" \S9\" \S9S.5        \" G\5      GrG\GR                  \" 5       \" S&5      \" 5       \" 5       S.5        \" 5       \" 5       \" 5       \" 5       S.Grg(      N)defaultdict)_regex)%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messager3   r4   newlines        b/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/regex/_regex_core.pyr;   error.__init__*   s    $Wc22$3?!--C81<DK}}Wa==DJ)00>G!299$++**  	4)    )r8   r6   r2   r3   r4   )NN)__name__
__module____qualname____firstlineno____doc__r;   __static_attributes__ rA   r?   r'   r'      s    	*rA   r'   c                       \ rS rSrSrg)_UnscopedFlagSet=   rH   NrB   rC   rD   rE   rG   rH   rA   r?   rJ   rJ   =       rA   rJ   c                       \ rS rSrSrg)
ParseErrorA   rH   NrL   rH   rA   r?   rO   rO   A   rM   rA   rO   c                       \ rS rSrSrg)_FirstSetErrorE   rH   NrL   rH   rA   r?   rR   rR   E   rM   rA   rR   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
rA   rH   N)*rB   rC   rD   rE   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   rl   object__str__rG   rH   rA   r?   r)   r)   I   s    AA	AAAA
AA	AAAABBAAA: nnGrA   r)   z()|?*+{^$.[\# z -z &_-.)||~~&&--rY   r/   )abefir   rj   prsur   r!   wxrW   rX   )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)  rH   NrL   rH   rA   r?   r   r   )  rM   rA   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keysrf   randomhasattrr   KeyErrorclearupdate)
cache_dict	args_dictlocale_sensitive
max_lengthdivisor
cache_keysoveragenumber_to_tossr   
doomed_keysensitivity_dictr3   pattern_typeflagsargsdefault_versionlocales                    r?   _shrink_cacher   0  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_encodingr   	fold_case)infostringr   s      r?   
_fold_caser   b  s7    JJE1$$$$E**rA   c                 \    [        [        R                  " U R                  U5      5      S:  $ z$Checks whether a character is cased.r/   )rf   r   get_all_casesr   )r   chars     r?   
is_cased_ir   j  s#    v##DJJ56::rA   c                 F    [        [        R                  " X5      5      S:  $ r   )rf   r   r   )r   r   s     r?   
is_cased_fr   n  s    v##E01A55rA   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_firstsetr0   AnyAllcompile)r   fsreverses      r?   _compile_firstsetr   r  sF    4::'(G		+BB''	 ::grA   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NOCASEr0   	Characterpositiver   add
with_flagsr   r   SetUnionlistoptimise)r   r   r   rh   r   ry   s         r?   r   r   |  s     eGJa##AJJ 	ll"
ALLFL34  h+, 
$W*y2H
B	T4	0BIrA   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     s'    I  rA   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(LrA   Fc                 L    U(       a  [        U5      $ [        U[        U 5      S9$ )zMakes a character literal.r   )r   r   )r   rg   r   s      r?   make_characterr     s"    Ut'<==rA   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KrA   c                 (    [        X[        U 5      S9$ )zMakes a string set.r   )	StringSetr   )r   r   s     r?   make_string_setr     s    TOD,ABBrA   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&;?<<rA   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matchrc   rf   Branch)sourcer   branchess      r?   _parse_patternr     sc    v,-H
,,s

v45 ,,s

 8}{(rA   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O_UR	                  [        5       5        GODU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OJU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        U5      (       a  [5        XXXB5        UR	                  S5        OhUR	                  [7        [9        U5      US95        OEUR	                  [7        [9        U5      US95        O"UR	                  [7        [9        U5      US95        GMZ  U V	s/ s H	  oc  M  U	PM     nn	[;        U5      $ s  sn	f )zParses a sequence, eg. 'abc'.Nz)|\F(.[^$z?*+{r   )r   r4   getSPECIAL_CHARSrc   parse_escapeparse_parenr   r   r   r$   AnyUAny	parse_setr   StartOfLineUStartOfLineStartOfString
EndOfLineU	EndOfLineEndOfStringLineUEndOfStringLineparse_quantifierapply_quantifierparse_fuzzyis_actually_fuzzyapply_constraintr   ordSequence)
r   r   sequencer   	saved_poschelementcountsconstraintsitems
             r?   r   r     s   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",[99,V;'3$OOD1 !	#b'%/)1 2 	#b'j IJ OOIc"g*EF[ ^ "*>H>H ?s   .N8Nc                     U R                  S5      S:X  a  gU R                  S5      U R                  S5      U R                  S5      4S:X  a  gg)	z4Checks whether a fuzzy constraint is actually fuzzy.rw   r   r   Fr|   ry   d)r  r  r  T)r   )r   s    r?   r   r   $  sG    sv%kooc2KOOC4HIMeerA   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   r0   GreedyRepeat
LazyRepeatPossessiveRepeatr4   r   is_emptyrc   )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rA   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   r0   GroupFuzzy
subpatternrc   )r   r   r   r   r   r   r   s          r?   r   r   N  sg    llnG2FMM9MM '5!!"7#5#5{C g34rA   )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rA   c                 *    U SL=(       a	    U [         :  $ )z,Checks whether a count is above the maximum.N	UNLIMITED)r5   s    r?   is_above_limitr  m  s    3)!33rA   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)r4   parse_countr   intr  r'   r   )r   r   r  r  s       r?   r  r  q  s    

IF#I||C'	 	Q'	&/C	NT	"J #I.	<<
i  N9$=$=*FMM9EE!68&--
 	 rA   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 })r4   parse_fuzzy_itemr   rO   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)r4   parse_cost_constraintrO   parse_cost_equation)r   r   r   s      r?   r(  r(    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)
r4   r   ALPHAparse_constraintparse_fuzzy_compareparse_cost_limitr'   r   DIGITSrO   )
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rA   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.  )r4   r#  r$  
ValueErrorr'   r   )r   r6  digitss      r?   r2  r2    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)rO   )r   r   r   s      r?   r0  r0    s%    	l	lIrA   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?   r1  r1    s)    ||D	c		rA   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   r4   parse_cost_termr   r1  rO   r$  r#  )r   r   rD  r5  r7  s        r?   r,  r,    s    16==&**MMDF!
,,s

% ,,s

 "&)Gl;v&'HA!|*FMM6::FFKrA   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   rO   r'   r   r4   r$  )r   rD  coeffr   s       r?   rF  rF  (  sR    E	B	l	z)6==&**EE5:ADHrA   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   )r4   r   r   r   r   r   r   r$   r   r   r   r'   r   r   r   )r   r   r   r   r   s        r?   r)  r)  4  s    

I	B	]:e443YzzF"xd"vu3YV**0&--KK	RZ88,fmmYGGrA   c                 ,    U R                  [        5      $ )z0Parses a quantifier's count, which can be empty.)	get_whiler3  rB  s    r?   r#  r#  N  s    F##rA   c                    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      $ US:X  d  US:X  a$  U R)                  5       [*        ;   a  [-        XX45      $ X@l         [/        X5      $ US:X  a  U R                   nU R1                  [3        S5      SS9n
U
SS R5                  5       (       aF  [6        R                  U
5      nU(       d  [9        SU R:                  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@  =!rO  >)Fr   #r   r_   r   09&r  -r  )>includeNr/   zunknown verb)r4   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peekr3  parse_rel_call_groupparse_flags_subpatternrL  r   isalphaVERBSr'   r   )r   r   r   r   saved_pos_2saved_pos_3r   groupsaved_flagsr  wordverbs               r?   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#Is(?'bFF !
%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))} )
&*4::+?&@#p !
"4::#78s   :L %L0 )L-0)M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@  rQ  rR  rO  T)allow_numericcannot refer to an open grouprV  unknown extension)r4   r   r\  r]  r^  r   r   r   r&   r_  r`  r  is_open_groupr'   r   r   rg  )r   r   r   r   r   ro  rp  r  s           r?   ra  ra    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.TrR  r   N)r4   r   r^  )r   r   r   s      r?   rb  rb    sX    
JJ	JJtAH9

4 A  J
MM#rA   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.rR  )r   r   r^  r   r&   r_  
LookAround)r   r   behindr   rp  r  s         r?   r[  r[    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  rN  FrO  r@  Tzexpected lookaround conditionalrR  r_   )r   r4   r   parse_lookaround_conditionalr'   r   r\  r^  r   r   r   r   r&   r_  r  Conditional)r   r   rp  r   r   ro  
yes_branch	no_branchs           r?   rc  rc    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)NrR  r_   )
r   r   r^  r   r&   r_  r   r   r   LookAroundConditional)r   r   r{  r   rp  r  r  r  s           r?   r}  r}    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.rR  )r   r   r^  r   r&   r_  Atomic)r   r   rp  r  s       r?   rd  rd  .  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_   rR  r/   r   )group_countr   r   rc   rE  r^  rf   r   )r   r   initial_group_countr   final_group_counts        r?   re  re  :  s     **v,-H((
,,s

.v45 13C3CD ,,s


 )
MM#
8}{(rA   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   rT  rR  )rL  r3  r^  	CallGroup)r   r   r   r4   ro  s        r?   rf  rf  L  s:    	Sy%%f--
MM#T#&&rA   c                 h   U R                  [        5      nU(       d!  [        SU R                  U R                  5      e[        U5      nUS:X  a  UR                  U-   OUR                  U-
  S-   nUS::  a!  [        SU R                  U R                  5      eU R                  S5        [        XU5      $ )z"Parses a relative call to a group.zmissing relative group numberr  r/   r   zinvalid relative group numberrR  )	rL  r3  r'   r   r4   r$  r  r^  r  )r   r   r   r4   r<  offsetro  s          r?   ri  ri  W  s    f%F3V]]FJJOO[F)+sDv%8H8H68QTU8UEz3V]]FJJOO
MM#T#&&rA   c                 R    [        U 5      nU R                  S5        [        XU5      $ )zParses a call to a named group.rR  )r\  r^  r  )r   r   r4   ro  s       r?   rg  rg  f  s%    vE
MM#T#&&rA   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)r4   r   REGEX_FLAGSr   )r   r   r   r   s       r?   parse_flag_setr  m  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.rW  z$bad inline flags: no flags after '-'r   T)r  r   r'   r   r4   r   inline_localer   r   flags_on	flags_offs       r?   parse_flagsr  }  sj    f%H||C"6*	>jj   	&!rA   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.rR  )
r   r   r   r   r   r   r&   r_  r   r^  )r   r   r  r  rp  r  s         r?   parse_subpatternr    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&  rR  Nrv  )
r  GLOBAL_FLAGSr'   r   r4   global_flagsrJ   r   r  parse_positional_flags)r   r   r  r  new_global_flagss        r?   rj  rj    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
??rA   c                 v    UR                   U-  U) -  Ul         [        UR                   [        -  5      U l        g)zParses positional flags.N)r   r   r&   r_  r  s       r?   r  r    s/    **x'I:5DJtzzG34FrA   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.rX  FrY  zmissing group namer   r/   zbad character in group name)rL  r   r'   r   r4   isdigitr$  isidentifier)r   rt  allow_group_0r   	min_groups        r?   r\  r\    s    CIu5D(&--DD||~~&AA	D	I 55v}}jj  !6 K	   ""5v}}jj  KrA   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1rA   c                 &    [        S U  5       5      $ )z#Checks whether a string is decimal.c              3   2   #    U  H  o[         ;   v   M     g 7fr  )r3  r  s     r?   r  is_decimal.<locals>.<genexpr>  s     -fV|fr  r  r  s    r?   
is_decimalr    s    -f---rA   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  rA   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pPrz   r   )
            )   i(   i)   r  r  r%   bad escape \%s)%r_  r   r'   r   r4   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_ESCAPESr3  parse_numeric_escape)	r   r   r   saved_ignorer   r   charsetr   rg   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.rT       rY   ru  )parse_octal_escaper4   r   r3  r  r  r   r   r   r   r$  r   rw  r'   r   r   )	r   r   r   r   r<  r   encoding
octal_maskrg   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3rA   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.   rp   rY   r   zincomplete escape \%sr  )r4   r   rf   r  rc   r$  re   r   r;  r'   r   )r   r   r<  r   r   r   rg   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 \rp   rZ   i   zbad hex escape \)r4   ranger   r  r'   re   r   rc   r$  r   r;  )r   r   escexpected_lenr   typer   r<  ry   r   rg   s              r?   r  r  q  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@  TrQ  ru  )r^  r4   r\  rw  r'   r   r   )r   r   r   r   s       r?   r  r    se    
MM#

Ifd#D
MM#$3V]]FJJOO$i00rA   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@  TrQ  zundefined named list)r^  r\  kwargsr'   r   r4   r   )r   r   r   s      r?   r  r    sW    
MM#fd#D
MM#|t;;.*FMM6::FF4&&rA   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  )r4   r   rL  NAMED_CHAR_PARTunicodedatalookupr   r   r   r'   r   )r   r   r   r   r   rg   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  CLMNPSZNrz   r   )r4   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    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0rA   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)rL  PROPERTY_NAME_PARTr4   r   ALNUMr   strip)r   r   r   r   r  s        r?   r  r    s~    ./D

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

I #It	J?rA   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_VERSIONr_  r   r    parse_set_imp_unionparse_set_unionr'   r   r4   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]).rq   r/   r   )parse_set_symm_diffr   rc   rf   r   r   r   itemss      r?   r  r    sb     ./E
,,t

(67 ,,t

 5zQQxD  rA   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]).rr   r/   r   )parse_set_interr   rc   rf   
SetSymDiffr  s      r?   r  r    sa    V*+E
,,t

_V23 ,,t

 5zQQxd""rA   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]).rs   r/   r   )parse_set_diffr   rc   rf   SetInterr  s      r?   r  r    sa    F)*E
,,t

^F12 ,,t

 5zQQxD  rA   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]).rt   r/   r   )r  r   rc   rf   SetDiffr  s      r?   r  r    sb     ./E
,,t

(67 ,,t

 5zQQx4rA   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  rA  )r  opr   s     r?   r  &parse_set_imp_union.<locals>.<genexpr>5  s     &J'Bv||B'7'7's   !r/   r   )r   r  r  parse_set_memberr4   r   r"   anySET_OPSrc   rf   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  rA   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.rW  r  zbad character range)parse_set_itemr4   r0   r   r   r   r   r  r  r"   r   r   rg   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((rA   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   r4   parse_posix_classrO   r"   r  r'   r   r   r   r   r   r   )r   r   r	  r   r  r  r   s          r?   r  r  i  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  rO   r  )r   r   r  r  r   s        r?   r%  r%    sF    \\#F)&1OI<<l9JdKKrA   c                 x    [        U 5      nX-
  n[        U5      S:  a  US4$ [        SU-  5      u  p4X-  U-   U4$ )z$Converts a float to a rational pair.g-C6?r/   g      ?)r$  absfloat_to_rational)fltint_partr'   dennums        r?   r*  r*    sJ    3xHNE
5zF{ u-HC>C$$rA   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/   rW  r   rp   /rW   z{}{}/{}z/1)splitrf   r*  floatr;  r9   endswith)numericsignpartsr.  r-  results         r?   numeric_to_rationalr9    s    !}
GACMgMM#E
5zQ$U58_uU1X%FGS	Uq$U58_5Sld-Ftt}MrA   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.rp   c              3   4   #    U  H  oS ;  d  M
  Uv   M     g7f)z_- NrH   r  s     r?   r  #standardise_name.<locals>.<genexpr>  s     <DbeOrrDs   		)r9  re   r;  ZeroDivisionErrorupper)r   s    r?   standardise_namer?    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ASSIGNEDrA  
UNASSIGNEDr   zunknown propertyzunknown property valuerZ   r  )GCSCRIPTBLOCKr/   ISrW   YES))rG  rE  )INrF  )r?  r>  _POSIX_CLASSES
PROPERTIESr   r'   r   r4   Propertyr   _BINARY_VALUES
startswith)propertyrg   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::
>>rA   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  rT  r  rY   r   r  )r   r/  r  r   r  parse_repl_hex_escapecompile_repl_groupparse_repl_named_charr'   r   r4   r0   sepbytesrf   r  r$  r3  r  )r   r3   
is_unicoder   rg   r  r<  r   s           r?   _compile_replacementr[  	  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&&&rA   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  rp   rZ   )	r  r   r  r'   re   r   r4   rc   r$  )r   r  r  r<  ry   r   s         r?   rU  rU  Q  su    F< ZZ\ZdBGGFOLmmVZZ) )b ! rwwv##rA   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)r4   r   rL  r/  r   r  r  r   r   r'   r   )r   r   r   rg   s       r?   rW  rW  ]  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@  TrQ  r   invalid group referenceunknown group)r^  r\  r  r$  groupsr'   r   r4   
groupindexr   
IndexError)r   r3   r   indexs       r?   rV  rV  n  s    
MM#fdD)D
MM#||~~D	E+W^^+16==&**MM*!!$'' *))*s   B B2z  rZ   z	NON-MATCHMATCHFTz SIMPLE_IGNORE_CASEz FULL_IGNORE_CASEc                 @    [        U 5      S:X  a  U S   $ [        U 5      $ Nr/   r   )rf   r   r  s    r?   make_sequencerk    s     
5zQQxE?rA   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)	RegexBasei  c                 &    U R                   U l        g r  )rb   _keyr<   s    r?   r;   RegexBase.__init__  s    NN	rA   Nc                 0   Uc  U R                   nO[        U5      nUc  U R                  nO[        U[        -     nUc  U R
                  nO[        U5      nXR                   :X  a   X R                  :X  a  X0R
                  :X  a  U $ U R                  XU5      $ r  )r   r   r   CASE_FLAGS_COMBINATIONSr   r   rebuildr<   r   r   r   s       r?   r   RegexBase.with_flags  s    }}HH~HJ0j1HIJIYI%**G
~~
%K||H)<<rA   c                     g r  rH   r<   r3   r   fuzzys       r?   
fix_groupsRegexBase.fix_groups  s    rA   c                     U $ r  rH   r<   r   r   s      r?   r   RegexBase.optimise      rA   c                     U $ r  rH   r<   r   s     r?   pack_charactersRegexBase.pack_characters  r  rA   c                     U $ r  rH   rp  s    r?   remove_capturesRegexBase.remove_captures  r  rA   c                     gNTrH   rp  s    r?   	is_atomicRegexBase.is_atomic      rA   c                     gr  rH   rp  s    r?   can_be_affixRegexBase.can_be_affix  r  rA   c                     gNFrH   rp  s    r?   contains_groupRegexBase.contains_group      rA   c                     [        5       er  )rR   r<   r   s     r?   get_firstsetRegexBase.get_firstset  s    rA   c                     gr  rH   rp  s    r?   has_simple_startRegexBase.has_simple_start  r  rA   c                 $    U R                  X5      $ r  )_compiler<   r   ry  s      r?   r   RegexBase.compile  s    }}W,,rA   c                     gr  rH   rp  s    r?   r  RegexBase.is_empty  r  rA   c                 ,    [        U R                  5      $ r  )hashro  rp  s    r?   __hash__RegexBase.__hash__  s    DIIrA   c                 n    [        U 5      [        U5      L =(       a    U R                  UR                  :H  $ r  )r  ro  r<   others     r?   __eq__RegexBase.__eq__  s'    DzT%[(DTYY%**-DDrA   c                 .    U R                  U5      (       + $ r  )r  r  s     r?   __ne__RegexBase.__ne__  s    ;;u%%%rA   c                 &    U R                  5       S 4$ r  	max_widthr  s     r?   get_required_stringRegexBase.get_required_string      ~~%%rA   )ro  )NNNFF)rB   rC   rD   rE   r;   r   rz  r   r  r  r  r  r  r  r  r   r  r  r  r  r  rG   rH   rA   r?   rm  rm    sX    #=(-E&&rA   rm  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  )rm  r;   r   r   r  rb   ro  )r<   r   r  s      r?   r;   ZeroWidthBase.__init__  s4    4 X NNDMM1	rA   c                     [        S /5      $ r  r   r  s     r?   r  ZeroWidthBase.get_firstset      D6{rA   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   ry  r   s       r?   r  ZeroWidthBase._compile  sV    ==[ EXEZE"333u%&&rA   c           	          [        SR                  [        U-  U R                  [        U R
                     SS/U R                     5      5        g )N	{}{} {}{}rp    ASCII)printr9   INDENT_op_namePOS_TEXTr   r  r<   indentr   s      r?   dumpZeroWidthBase.dump  s@    k  &$--
4==
!B>$--#@B 	CrA   c                     gr  rH   rp  s    r?   r  ZeroWidthBase.max_width      rA   )ro  r  r   N)Tr   )
rB   rC   rD   rE   r;   r  r  r  r  rG   rH   rA   r?   r  r    s    2	'CrA   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  rg  ANYc                     gr  rH   rp  s    r?   r  Any.has_simple_start  r  rA   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&.//rA   c                 \    [        SR                  [        U-  U R                  5      5        g )N{}{})r  r9   r  r  r  s      r?   r  Any.dump  s    fmmFVOT]];<rA   c                     gNr/   rH   rp  s    r?   r  Any.max_width  r  rA   rH   N)rB   rC   rD   rE   OPr  ANY_REVr  r  r  r  r  r  rG   rH   rA   r?   r   r     s-    ffBJJ/GH0=rA   r   c                   P    \ rS rSr\R
                  \R                  S.rSrS r	Sr
g)r   i  rg  ANY_ALLc                 h    SU l         SU l        SU l        U R                  U R                   4U l        g )NTFr   )r   r   r   rb   ro  rp  s    r?   r;   AnyAll.__init__  s+    NNDMM1	rA   )ro  r   r   r   N)rB   rC   rD   rE   r  r  ANY_ALL_REVr  r  r;   rG   rH   rA   r?   r   r     s    jj7GH2rA   r   c                   J    \ rS rSr\R
                  \R                  S.rSrSr	g)r   i  rg  ANY_UrH   N)
rB   rC   rD   rE   r  r  	ANY_U_REVr  r  rG   rH   rA   r?   r   r     s    hhbll3GHrA   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  )rm  r;   r  )r<   r  s     r?   r;   Atomic.__init__  s    4 $rA   c                 <    U R                   R                  XU5        g r  r  rz  rx  s       r?   rz  Atomic.fix_groups      ""7U;rA   c                     U R                   R                  X5      U l         U R                   R                  5       (       a  U R                   $ U $ r  )r  r   r  r}  s      r?   r   Atomic.optimise"  s:    //224A??##%%??"rA   c                 F    U R                   R                  U5      U l         U $ r  r  r  r  s     r?   r  Atomic.pack_characters)      //99$?rA   c                 D    U R                   R                  5       U l         U $ r  r  r  rp  s    r?   r  Atomic.remove_captures-      //99;rA   c                 6    U R                   R                  5       $ r  r  r  rp  s    r?   r  Atomic.can_be_affix1      ++--rA   c                 6    U R                   R                  5       $ r  r  r  rp  s    r?   r  Atomic.contains_group4      --//rA   c                 8    U R                   R                  U5      $ r  r  r  r  s     r?   r  Atomic.get_firstset7      ++G44rA   c                 6    U R                   R                  5       $ r  r  r  rp  s    r?   r  Atomic.has_simple_start:      //11rA   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:, 	rA   c                     [        SR                  [        U-  5      5        U R                  R	                  US-   U5        g )N{}ATOMICr/   )r  r9   r  r  r  r  s      r?   r  Atomic.dumpA  s1    j01VaZ1rA   c                 6    U R                   R                  5       $ r  r  r  rp  s    r?   r  Atomic.is_emptyE      ''))rA   c                 n    [        U 5      [        U5      L =(       a    U R                  UR                  :H  $ r  )r  r  r  s     r?   r  Atomic.__eq__H  s0    T
d5k) doo


/ 	rA   c                 6    U R                   R                  5       $ r  r  r  rp  s    r?   r  Atomic.max_widthL      ((**rA   c                 8    U R                   R                  U5      $ r  r  r  r  s     r?   r  Atomic.get_required_stringO      227;;rA   )r  N)rB   rC   rD   rE   r;   rz  r   r  r  r  r  r  r  r  r  r  r  r  r  rG   rH   rA   r?   r  r    sM    %<.0522*+<rA   r  c                   0    \ rS rSr\R
                  rSrSrg)BoundaryiR  BOUNDARYrH   N)	rB   rC   rD   rE   r  r!  r  r  rG   rH   rA   r?   r   r   R  s    kkGHrA   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   iV  c                 :    [         R                  U 5        Xl        g r  )rm  r;   r   )r<   r   s     r?   r;   Branch.__init__W  s    4  rA   c                 N    U R                    H  nUR                  XU5        M     g r  )r   rz  )r<   r3   r   ry  rv   s        r?   rz  Branch.fix_groups[  s    ALL51 rA   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      $ ri  )r   r   r   _flatten_branches_split_common_suffix_split_common_prefix_reduce_to_setrf   _add_precheckrc   insertrk  )r<   r   r   r   suffixrS  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8rA   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  r4   branchr   s           r?   r,  Branch._add_precheck  sz    %bFF|w&6+<+<+FF--c23	  tW.MWy|W.MNN.Ms   7Bc                 p    U R                    Vs/ s H  o"R                  U5      PM     snU l         U $ s  snf r  )r   r  )r<   r   rv   s      r?   r  Branch.pack_characters  s0    :>--H-Q**40-H Is   3c                 n    U R                    Vs/ s H  oR                  5       PM     snU l         U $ s  snf r  )r   r  )r<   rv   s     r?   r  Branch.remove_captures  s.    6:mmDm**,mD E   2c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  r  rv   s     r?   r  #Branch.is_atomic.<locals>.<genexpr>       8-Q;;==-   r  r   rp  s    r?   r  Branch.is_atomic      8$--888rA   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  )r  r@  s     r?   r  &Branch.can_be_affix.<locals>.<genexpr>  s     ;]>>##]rC  rD  rp  s    r?   r  Branch.can_be_affix  s    ;T]];;;rA   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  r@  s     r?   r  (Branch.contains_group.<locals>.<genexpr>  s     =}!##%%}rC  )r  r   rp  s    r?   r  Branch.contains_group  s    =t}}===rA   c                     [        5       nU R                   H  nX#R                  U5      -  nM     U=(       d    [        S /5      $ r  )r   r   r  )r<   r   r   rv   s       r?   r  Branch.get_firstset  s;    UA..))B   S$[ rA   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$ Nr3  )r   r  BRANCHr   r   rc   NEXTr  )r<   r   ry  r   rv   s        r?   r  Branch._compile  sf    }}IAKK		'12KK$  FF:RrA   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  r9   r  r   r  )r<   r  r   rv   s       r?   r  Branch.dump  sr    j01afqj'2qs$A&--01FF6A:w' %rA   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   r0   r   r   r   rc   )r   r   r   new_branchesrv   s        r?   r(  Branch._flatten_branches  sV     A

4)A!V$$##AJJ/##A&  rA   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  rf   r  ru   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  rH   )r  ru   r4   rS  s     r?   r  ra    ,      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  ru   r5   s     r?   r  ra    s*      ( IJ(9(9!U(C(C   #&
r0   r   rc   r  minr  r  r   r   rk  )r   r   alternativesrv   r  end_posr[  ru   r5   r4   rS  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--rA   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  r_  r`  s     r?   r  .Branch._split_common_suffix.<locals>.<genexpr> 	  rb  rc  r   r3  c              3   :   >#    U  H  nUT   TT   :H  v   M     g 7fr  rH   )r  ru   r4   r.  s     r?   r  rr  	  re  rf  r/   c              3   P   >#    U  H  n[         R                  UT5      v   M     g 7fr  )r   _can_split_revri  s     r?   r  rr  	  s*      ( MN(=(=a(G(Grj  rk  )r   r   rm  rv   r  rn  r[  ru   r5   r4   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 ,..rA   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/   TFrW   )r   _is_full_case
_is_folded)r  r5   s     r?   rh  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rA   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/   FrW   )rf   r   rx  ry  )r  r5   r#  s      r?   ru  Branch._can_split_rev6	  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rA   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_characterrg   rc   
setdefaultrf   r0   r   r  _flush_char_prefix)r   r   r   prefixedorderr[  rv   s          r?   _merge_common_prefixesBranch._merge_common_prefixesQ	  s   
 t$A**1--!((!-  #e*5Q))agg))!''!*55))*11!'':  !1!13u:>))$  ##A&   	!!$%FrA   c                 x    [        U [        5      =(       a$    U R                  =(       a    U R                  (       + $ r  )r0   r   r   r   r   s    r?   r~  Branch._is_simple_characterm	  s$    !Y'KAJJKq||;KKrA   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   r0   r   rL  SetBaser   r   _flush_set_membersr   r   rc   )r   r   r   r[  r  r   rv   s          r?   r+  Branch._reduce_to_setq	  s     
A!i7;<<<<:---dU"$ "#J		!,,&,9:))$  ##A& " 	!!$
	 rA   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  rH   )pairr  s    r?   <lambda>+Branch._flush_char_prefix.<locals>.<lambda>	  s    
Q.rA   keyr/   r   FT)
sortedr  rf   rc   rk  r   r   r   r   r   )r   r   r  r  r[  rg   r   subbranchesoptionalrv   r   s      `       r?   r  Branch._flush_char_prefix	  s     %hnn&6 =  OE8}!##M(1+$>?  !A1vz#**=13+AB%X#**8:6#' " $Yu%5vk7J$KL##H$5$5d$DE " 	rA   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   )rf   r   r   r   rc   r   r   )r   r   r  r   r[  r  s         r?   r  Branch._flush_set_members	  s_     u:?;q>DD$u+.77FDDOOzOBCrA   c                     SUs=::  a  [        U 5      :  d   g  gX   n[        U[        5      =(       a-    UR                  =(       a    UR                  [
        -  [
        :H  $ )Nr   F)rf   r0   r   r   r   FULLIGNORECASE)r  ry   r  s      r?   rx  Branch._is_full_case	  sV    A"E
" #x4+ ? ???^+
>	@rA   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)NrW   Frp   c              3   L   #    U  H  n[        UR                  5      v   M     g 7fr  )chrrg   r  ry   s     r?   r  $Branch._is_folded.<locals>.<genexpr>	  s     5u!QWWus   "$T)
rf   r0   r   r   r   re   r   r   FULL_CASE_FOLDINGget_expand_on_folding)r  ry   foldedexpanding_charsr   s        r?   ry  Branch._is_folded	  s    u:>Aq),,AJJlll 
 5u55!!"3V< !668 A))*;Q?? ! rA   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  r@  s     r?   r  "Branch.is_empty.<locals>.<genexpr>	  s     7A::<<rC  rD  rp  s    r?   r  Branch.is_empty	  s    7777rA   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LrA   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  r@  s     r?   r  #Branch.max_width.<locals>.<genexpr>	  rB  rC  )rE  r   rp  s    r?   r  Branch.max_width	  rF  rA   )r   N)!rB   rC   rD   rE   r;   rz  r   r,  r  r  r  r  r  r  r  r  staticmethodr(  r*  r)  rh  ru  r  r~  r+  r  r  rx  ry  r  r  r  rG   rH   rA   r?   r   r   V  sF   !2!9FO9<>!( 
 
 '. '.R &/ &/P  0  4  6 L L  6  2   @ @  *8M9rA   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  )rm  r;   r   ro  r   rb   ro  )r<   r   ro  r   s       r?   r;   CallGroup.__init__	  s3    4 	
 NNDJJ.	rA   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)Nr`  r   ra  r/   zambiguous group reference)r$  ro  r;  r   group_indexr   r'   r   r  open_group_countgroup_callsrc   rb   ro  rx  s       r?   rz  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                 D    [        SU R                  U R                  5      eNzgroup reference not allowedr'   r3   r   rp  s    r?   r  CallGroup.remove_captures	      14<<OOrA   c                 <    [         R                  U R                  4/$ r  )r  
GROUP_CALLcall_refr  s      r?   r  CallGroup._compile	  s    .//rA   c                 \    [        SR                  [        U-  U R                  5      5        g )Nz{}GROUP_CALL {})r  r9   r  ro  r  s      r?   r  CallGroup.dump 
  s     &&v

CDrA   c                 n    [        U 5      [        U5      L =(       a    U R                  UR                  :H  $ r  )r  ro  r  s     r?   r  CallGroup.__eq__
  '    DzT%[(FTZZ5;;-FFrA   c                     [         $ r  r  rp  s    r?   r  CallGroup.max_width
      rA   c                     S U l         g r  r   rp  s    r?   __del__CallGroup.__del__	
  	    	rA   )ro  ro  r   r   N)rB   rC   rD   rE   r;   rz  r  r  r  r  r  r  rG   rH   rA   r?   r  r  	  s-    //&P0EGrA   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    rA   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<  	!rA   )r  r  NrB   rC   rD   rE   r;   r  rG   rH   rA   r?   r  r  
  s    !rA   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  )rm  r;   rg   r   r   rs  r   r   r  r   r   r  r  r  rb   ro  )r<   rg   r   r   r   s        r?   r;   Character.__init__
  s    4 
X1*=iMMt?
 **+<c$**oNDKdjj/DK^^TZZ
//4>>+	rA   c                 0    [        U R                  XU5      $ r  )r   rg   ru  s       r?   rt  Character.rebuild-
  s    X9EErA   c                     U $ r  rH   r<   r   r   r   s       r?   r   Character.optimise0
  r  rA   c                     [        U /5      $ r  r  r  s     r?   r  Character.get_firstset3
  r  rA   c                     gr  rH   rp  s    r?   r  Character.has_simple_start6
  r  rA   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   rg   rf   r  r   r  r   r   )r<   r   ry  r   r   r   s         r?   r  Character._compile9
  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  rg   lstripr  r9   r  r  r   	CASE_TEXTr   r<   r  r   displays       r?   r  Character.dumpL
  sV    DJJ(//5#**6F?
4==
!7Idoo,FH 	IrA   c                 8    XR                   :H  U R                  :H  $ r  )rg   r   r<   r   s     r?   matchesCharacter.matchesQ
  s    jj T]]22rA   c                 ,    [        U R                  5      $ r  )rf   r  rp  s    r?   r  Character.max_widthT
  s    4;;rA   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{rc  r   )r   r   r  folded_charactersr  s     r?   r  Character.get_required_stringW
  s,    }}!&&Ct{{&C!C$wrA   )ro  r   r  r  r   rg   r   NF)rB   rC   rD   rE   r   r  	CHARACTERr   CHARACTER_IGNr   r  CHARACTER_REVCHARACTER_IGN_REVr  r;   rt  r   r  r  r  r  r  r  r  rG   rH   rA   r?   r   r   
  s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G (,+"F,&I
3 rA   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                 j    [         R                  U 5        Xl        X l        X0l        X@l        XPl        g r  )rm  r;   r   ro  yes_itemno_itemr   )r<   r   ro  r  r  r   s         r?   r;   Conditional.__init__`
  s)    4 	
  rA   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   ra  r`  )r$  ro  r;  r   r  r   r'   r   r  r  rz  r  rx  s       r?   rz  Conditional.fix_groupsh
  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  r~  ro  r   )r<   r   r   r  r  s        r?   r   Conditional.optimise|
  sA    ==))$8,,''64XNNrA   c                     U R                   R                  U5      U l         U R                  R                  U5      U l        U $ r  )r  r  r  r  s     r?   r  Conditional.pack_characters
  s3    55d;||33D9rA   c                     U R                   R                  5       U l         U R                  R                  5       U l        g r  )r  r  r  rp  s    r?   r  Conditional.remove_captures
  s*    557||335rA   c                 x    U R                   R                  5       =(       a    U R                  R                  5       $ r  )r  r  r  rp  s    r?   r  Conditional.is_atomic
  s'    }}&&(ET\\-C-C-EErA   c                 x    U R                   R                  5       =(       a    U R                  R                  5       $ r  )r  r  r  rp  s    r?   r  Conditional.can_be_affix
  s'    }}))+K0I0I0KKrA   c                 x    U R                   R                  5       =(       d    U R                  R                  5       $ r  )r  r  r  rp  s    r?   r  Conditional.contains_group
  s'    }}++-N1L1L1NNrA   c                 p    U R                   R                  U5      U R                  R                  U5      -  $ r  )r  r  r  r  s     r?   r  Conditional.get_firstset
  s0    **73
,,
#
#G
,- 	.rA   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_EXISTSro  r   r  r   r  rc   rU  r  r<   r   ry  r   add_codes        r?   r  Conditional._compile
  s~    $**-.DMM))'9:<<''7KK$KK!RVVJrA   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/   rX  )r  r9   r  ro  r  r  r  r  r  s      r?   r  Conditional.dump
  s}    !((&$**EF6A:w/||$$&&&--01LLfqj'2 'rA   c                 x    U R                   R                  5       =(       a    U R                  R                  5       $ r  )r  r  r  rp  s    r?   r  Conditional.is_empty
  s'    }}%%'CDLL,A,A,CCrA   c                     [        U 5      [        U5      L =(       aG    U R                  U R                  U R                  4UR                  UR                  UR                  4:H  $ r  )r  ro  r  r  r  s     r?   r  Conditional.__eq__
  sR    DzT%[( Hdjj$--
,,.!KKG.H 	HrA   c                 z    [        U R                  R                  5       U R                  R                  5       5      $ r  rE  r  r  r  rp  s    r?   r  Conditional.max_width
  )    4==**,dll.D.D.FGGrA   c                     S U l         g r  r  rp  s    r?   r  Conditional.__del__
  r  rA   )ro  r   r  r   r  N)rB   rC   rD   rE   r;   rz  r   r  r  r  r  r  r  r  r  r  r  r  r  rG   rH   rA   r?   r~  r~  _
  sT    !9(O
6FLO.
3DHHrA   r~  c                   0    \ rS rSr\R
                  rSrSrg)DefaultBoundaryi
  DEFAULT_BOUNDARYrH   N)	rB   rC   rD   rE   r  r.  r  r  rG   rH   rA   r?   r-  r-  
  s    !!G!HrA   r-  c                   0    \ rS rSr\R
                  rSrSrg)DefaultEndOfWordi
  DEFAULT_END_OF_WORDrH   N)	rB   rC   rD   rE   r  r1  r  r  rG   rH   rA   r?   r0  r0  
  s    $$G$HrA   r0  c                   0    \ rS rSr\R
                  rSrSrg)DefaultStartOfWordi
  DEFAULT_START_OF_WORDrH   N)	rB   rC   rD   rE   r  r4  r  r  rG   rH   rA   r?   r3  r3  
  s    &&G&HrA   r3  c                   0    \ rS rSr\R
                  rSrSrg)r   i
  END_OF_LINErH   N)	rB   rC   rD   rE   r  r6  r  r  rG   rH   rA   r?   r   r   
      nnGHrA   r   c                   0    \ rS rSr\R
                  rSrSrg)r   i
  END_OF_LINE_UrH   N)	rB   rC   rD   rE   r  r9  r  r  rG   rH   rA   r?   r   r   
      GHrA   r   c                   0    \ rS rSr\R
                  rSrSrg)EndOfStringi
  END_OF_STRINGrH   N)	rB   rC   rD   rE   r  r=  r  r  rG   rH   rA   r?   r<  r<  
  r:  rA   r<  c                   0    \ rS rSr\R
                  rSrSrg)r   i
  END_OF_STRING_LINErH   N)	rB   rC   rD   rE   r  r?  r  r  rG   rH   rA   r?   r   r   
  s    ##G#HrA   r   c                   0    \ rS rSr\R
                  rSrSrg)r   i
  END_OF_STRING_LINE_UrH   N)	rB   rC   rD   rE   r  rA  r  r  rG   rH   rA   r?   r   r   
  s    %%G%HrA   r   c                   0    \ rS rSr\R
                  rSrSrg)	EndOfWordi
  END_OF_WORDrH   N)	rB   rC   rD   rE   r  rD  r  r  rG   rH   rA   r?   rC  rC  
  r7  rA   rC  c                       \ rS rSrSrS rSrg)Failurei
  FAILUREc                 &    [         R                  4/$ r  )r  rG  r  s      r?   r  Failure._compile
  s    rA   rH   NrB   rC   rD   rE   r  r  rG   rH   rA   r?   rF  rF  
  s    H rA   rF  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 )	NrD  rH  r  r  rw   r   r/   )r  ry   r|   rE  )rm  r;   r  r   r  r   )r<   r  r   rw   s       r?   r;   Fuzzy.__init__
  s    4 K$& [ F++**1i8  {c%j(&&q&1  &&q)4  	sI. [ F#..q!4  )*#q!##KrA   c                 <    U R                   R                  XS5        g r  r  rx  s       r?   rz  Fuzzy.fix_groups  s    ""7T:rA   c                 F    U R                   R                  U5      U l         U $ r  r  r  s     r?   r  Fuzzy.pack_characters	  r  rA   c                 D    U R                   R                  5       U l         U $ r  r  rp  s    r?   r  Fuzzy.remove_captures  r  rA   c                 6    U R                   R                  5       $ r  r  r  rp  s    r?   r  Fuzzy.is_atomic  r  rA   c                 6    U R                   R                  5       $ r  r  rp  s    r?   r  Fuzzy.contains_group  r  rA   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/   rH  rD  rE  r'  T)r   rc   r  r  r   r  	FUZZY_EXTr   r   rU  r  r  FUZZY)r<   r   ry  	argumentsrw   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;? 	@rA   c                     U R                  5       nU(       a  SU-   n[        SR                  [        U-  U5      5        U R                  R                  US-   U5        g )Nr^  z	{}FUZZY{}r/   )_constraints_to_stringr  r9   r  r  r  )r<   r  r   r   s       r?   r  
Fuzzy.dump5  sN    113+Kk  &+>?VaZ1rA   c                 6    U R                   R                  5       $ r  r  rp  s    r?   r  Fuzzy.is_empty<  r  rA   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rA   c                     [         $ r  r  rp  s    r?   r  Fuzzy.max_widthC  r  rA   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   rp   z{}<=z<={}rD  r  rE  z{}<={}r  r!  )r   r9   rc   re   )	r<   r   r   rl  rE  conrD  rI  limits	            r?   ra  Fuzzy._constraints_to_stringF  s   D''-HCaxCQwmmC(KCv}}S))s# " D$$V,T2EqyFMM%67 
   (/??388D>59Dt$xx$$rA   )r   r  r  )rB   rC   rD   rE   r;   rz  r  r  r  r  r  r  r  r  r  ra  rG   rH   rA   r?   r  r  
  sA    !#F;+0@<2*F%rA   r  c                   &    \ rS rSrS rS rS rSrg)r  ig  c           	          [        [        [        [        5       SS 5      [	        5       /5      5      nUR                  X5      $ r  )r  r   r
  r   GraphemeBoundaryr   )r<   r   ry  grapheme_matchers       r?   r  Grapheme._compileh  sA     "(JvxD,I

, #    ''77rA   c                 F    [        SR                  [        U-  5      5        g )Nz
{}GRAPHEME)r  r9   r  r  s      r?   r  Grapheme.dumpp  s    l!!&6/23rA   c                     [         $ r  r  rp  s    r?   r  Grapheme.max_widths  r  rA   rH   N)rB   rC   rD   rE   r  r  r  rG   rH   rA   r?   r  r  g  s    84rA   r  c                       \ rS rSrS rSrg)rp  iv  c                 (    [         R                  S4/$ r  )r  GRAPHEME_BOUNDARYr  s      r?   r   GraphemeBoundary.compilew  s    %%q)**rA   rH   N)rB   rC   rD   rE   r   rG   rH   rA   r?   rp  rp  v  s    +rA   rp  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	  iz  GREEDY_REPEATc                 R    [         R                  U 5        Xl        X l        X0l        g r  )rm  r;   r  r  r  )r<   r  r  r  s       r?   r;   GreedyRepeat.__init__~  s    4 $""rA   c                 <    U R                   R                  XU5        g r  r  rx  s       r?   rz  GreedyRepeat.fix_groups  r  rA   c                     U R                   R                  X5      n[        U 5      " X0R                  U R                  5      $ r  )r  r   r  r  r  r<   r   r   r  s       r?   r   GreedyRepeat.optimise  s/    __--d<
Dz*nndnnEErA   c                 F    U R                   R                  U5      U l         U $ r  r  r  s     r?   r  GreedyRepeat.pack_characters  r  rA   c                 D    U R                   R                  5       U l         U $ r  r  rp  s    r?   r  GreedyRepeat.remove_captures  r  rA   c                 v    U R                   U R                  :H  =(       a    U R                  R                  5       $ r  )r  r  r  r  rp  s    r?   r  GreedyRepeat.is_atomic  s'    ~~/ODOO4M4M4OOrA   c                     gr  rH   rp  s    r?   r  GreedyRepeat.can_be_affix  r  rA   c                 6    U R                   R                  5       $ r  r  rp  s    r?   r  GreedyRepeat.contains_group  r  rA   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	rA   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  rc   r  r  r   r   r  r  )r<   r   ry  repeatr  s        r?   r  GreedyRepeat._compile  st    ,,/>>!MM)$MM$..)__,,W<
Iv*,
|;<rA   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  r9   r  r  r  r  r  r<   r  r   rl  s       r?   r  GreedyRepeat.dump  s^    >>!ENNEl!!&6/4==
..%! 	" 	VaZ1rA   c                 6    U R                   R                  5       $ r  r  rp  s    r?   r  GreedyRepeat.is_empty  r  rA   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~~
...#..
//. 	rA   c                 v    U R                   c  [        $ U R                  R                  5       U R                   -  $ r  )r  r  r  r  rp  s    r?   r  GreedyRepeat.max_width  s.    >>!((*T^^;;rA   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  rl  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 $&&rA   )r  r  r  N)rB   rC   rD   rE   r  r|  r  r  r;   rz  r   r  r  r  r  r  r  r  r  r  r  r  r  rG   rH   rA   r?   r	  r	  z  s_    GH#<F
P0=2*
<'rA   r	  c                   &    \ rS rSrS rS rS rSrg)r  i  c                     gr  rH   rp  s    r?   r  PossessiveRepeat.is_atomic  r  rA   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  rc   r  r  r  r   r  )r<   r   ry  r  r  s        r?   r  PossessiveRepeat._compile  s    __,,W<
I,,/>>!MM)$MM$..)))f.;z66*?  	rA   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/   rW   )r  r9   r  r  r  r  r  r  r  s       r?   r  PossessiveRepeat.dump  sz    j01>>!ENNEl!!&FQJ"7
..%! 	" 	VaZ1rA   rH   N)rB   rC   rD   rE   r  r  r  rG   rH   rA   r?   r  r    s    
2rA   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  )rm  r;   r   ro  r  r  )r<   r   ro  r  s       r?   r;   Group.__init__  s&    4 	
$rA   c                     XU4U R                   R                  U R                  '   U R                  R	                  XU5        g r  )r   defined_groupsro  r  rz  rx  s       r?   rz  Group.fix_groups  s3    04u/E		  ,""7U;rA   c                 z    U R                   R                  X5      n[        U R                  U R                  U5      $ r  )r  r   r  r   ro  r  s       r?   r   Group.optimise  s-    __--d<
TYY

J77rA   c                 F    U R                   R                  U5      U l         U $ r  r  r  s     r?   r  Group.pack_characters  r  rA   c                 6    U R                   R                  5       $ r  r  rp  s    r?   r  Group.remove_captures
      ..00rA   c                 6    U R                   R                  5       $ r  rU  rp  s    r?   r  Group.is_atomic  r  rA   c                     gr  rH   rp  s    r?   r  Group.can_be_affix  r  rA   c                     gr  rH   rp  s    r?   r  Group.contains_group  r  rA   c                 8    U R                   R                  U5      $ r  r  r  s     r?   r  Group.get_firstset  r  rA   c                 6    U R                   R                  5       $ r  r  rp  s    r?   r  Group.has_simple_start  r	  rA   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  )ro  r   private_groupsr  	call_refsr   r  r  GROUPr$  r  r   r  )r<   r   ry  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rA   c                     U R                   nUS:  a  U R                  R                  U   n[        SR	                  [
        U-  U5      5        U R                  R                  US-   U5        g )Nr   z
{}GROUP {}r/   )ro  r   r  r  r9   r  r  r  )r<   r  r   ro  s       r?   r  
Group.dump2  sW    

19II,,U3El!!&6/59:VaZ1rA   c                     [        U 5      [        U5      L =(       a1    U R                  U R                  4UR                  UR                  4:H  $ r  )r  ro  r  r  s     r?   r  Group.__eq__9  sB    T
d5k) *tzz4??.K;;((
)/* 	+rA   c                 6    U R                   R                  5       $ r  r  rp  s    r?   r  Group.max_width=  r  rA   c                 8    U R                   R                  U5      $ r  r  r  s     r?   r  Group.get_required_string@  r  rA   c                     S U l         g r  r  rp  s    r?   r  Group.__del__C  r  rA   )r  ro  r   r  N)rB   rC   rD   rE   r;   rz  r   r  r  r  r  r  r  r  r  r  r  r  r  r  rG   rH   rA   r?   r  r    sR    <8
1+52,2++<rA   r  c                   0    \ rS rSr\R
                  rSrSrg)KeepiF  KEEPrH   N)	rB   rC   rD   rE   r  r  r  r  rG   rH   rA   r?   r  r  F  s    ggGHrA   r  c                   0    \ rS rSr\R
                  rSrSrg)r
  iJ  LAZY_REPEATrH   N)	rB   rC   rD   rE   r  r  r  r  rG   rH   rA   r?   r
  r
  J  r7  rA   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)rz  iN  AHEADBEHINDrg  c                 z    [         R                  U 5        [        U5      U l        [        U5      U l        X0l        g r  )rm  r;   r   r{  r   r  )r<   r{  r   r  s       r?   r;   LookAround.__init__Q  s+    4 6lX$rA   c                 P    U R                   R                  XR                  U5        g r  )r  rz  r{  rx  s       r?   rz  LookAround.fix_groupsW  s    ""7KK?rA   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   r{  r   r  rz  r  s       r?   r   LookAround.optimiseZ  sL    __--dKK@
==Z0022$++t}}jAArA   c                 F    U R                   R                  U5      U l         U $ r  r  r  s     r?   r  LookAround.pack_charactersa  r  rA   c                 6    U R                   R                  5       $ r  r  rp  s    r?   r  LookAround.remove_capturese  r  rA   c                 6    U R                   R                  5       $ r  rU  rp  s    r?   r  LookAround.is_atomich  r  rA   c                 6    U R                   R                  5       $ r  r  rp  s    r?   r  LookAround.can_be_affixk  r  rA   c                 6    U R                   R                  5       $ r  r  rp  s    r?   r  LookAround.contains_groupn  r  rA   c                     U R                   (       a+  U R                  U:X  a  U R                  R                  U5      $ [	        S /5      $ r  )r   r{  r  r  r   r  s     r?   r  LookAround.get_firstsetq  s5    ==T[[G3??//88D6{rA   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$  r{  r  r   r  r  s       r?   r  LookAround._compilew  s~    ==[ EXEZE--O(<=>
//
!
!$++
./3566*> 	?rA   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  r9   r  	_dir_textr{  r  r   r  r  r  s      r?   r  LookAround.dump  sV    m""6F?
..
%x'>@ 	AVaZ5rA   c                 \    U R                   =(       a    U R                  R                  5       $ r  )r   r  r  rp  s    r?   r  LookAround.is_empty  s    }};!9!9!;;rA   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  LookAround.__eq__  sT    DzT%[( Odkk4==
//.$||U^^U=M=MN.O 	OrA   c                     gr  rH   rp  s    r?   r  LookAround.max_width  r  rA   )r{  r   r  N)rB   rC   rD   rE   r  r;   rz  r   r  r  r  r  r  r  r  r  r  r  r  rG   rH   rA   r?   rz  rz  N  sU    x0I%@B1+.0
?6
<OrA   rz  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  i  r  r  rg  c                     [         R                  U 5        [        U5      U l        [        U5      U l        X0l        X@l        XPl        g r  )rm  r;   r   r{  r   r  r  r  )r<   r{  r   r  r  r  s         r?   r;   LookAroundConditional.__init__  s5    4 6lX$ rA   c                     U R                   R                  XU5        U R                  R                  XU5        U R                  R                  XU5        g r  )r  rz  r  r  rx  s       r?   rz   LookAroundConditional.fix_groups  s>    ""7U;  59%8rA   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   r{  r  r  r  r   )r<   r   r   r  r  r  s         r?   r   LookAroundConditional.optimise  sh    __--dKK@
==))$<,,''kk:$T[[$--
 	rA   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  r  r  r  r  s     r?   r  %LookAroundConditional.pack_characters  sI    //99$?55d;||33D9rA   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  rp  s    r?   r  %LookAroundConditional.remove_captures  s>    //99;557||335rA   c                     U R                   R                  5       =(       a;    U R                  R                  5       =(       a    U R                  R                  5       $ r  )r  r  r  r  rp  s    r?   r  LookAroundConditional.is_atomic  s@    ))+ #0G0G0I #
,,
 
 
"	$rA   c                     U R                   R                  5       =(       a;    U R                  R                  5       =(       a    U R                  R                  5       $ r  )r  r  r  r  rp  s    r?   r  "LookAroundConditional.can_be_affix  s@    ,,. *4==3M3M3O *ll'')	+rA   c                     U R                   R                  5       =(       d;    U R                  R                  5       =(       d    U R                  R                  5       $ r  )r  r  r  r  rp  s    r?   r  $LookAroundConditional.contains_group  sD    ..0 J
--
&
&
(J,0LL,G,G,I	KrA   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   r{  r   r  r   rc   rU  r  r  r  r  s        r?   r  LookAroundConditional._compile  s    T]]!3ST[[5IJKDOO++DKK?@RWWK DMM))'9:<<''7KK$KK!RVVJrA   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{}EITHERrX  )r  r9   r  r  r{  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 'rA   c                     U R                   R                  5       =(       a    U R                  R                  5       =(       d    U R                  R                  5       $ r  )r  r  r  r  rp  s    r?   r  LookAroundConditional.is_empty  s>    ((*Gt}}/E/E/G "
,,


!	#rA   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rA   c                 z    [        U R                  R                  5       U R                  R                  5       5      $ r  r'  rp  s    r?   r  LookAroundConditional.max_width  r)  rA   c                 &    U R                  5       S 4$ r  r  r  s     r?   r  )LookAroundConditional.get_required_string  r  rA   )r{  r  r   r  r  N)rB   rC   rD   rE   r  r;   rz  r   r  r  r  r  r  r  r  r  r  r  r  rG   rH   rA   r?   r  r    sU    x0I9
6
$+K3#MH&rA   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    	rA   c                 .    [        U R                  5      /$ r  )r   r   r  s      r?   r  PrecompiledCode._compile  s    dii !!rA   r  Nr  rH   rA   r?   r  r    s    "rA   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)rL  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  )rm  r;   rg   r   r   rs  r   r   r  rb   ro  )r<   rg   r   r   r   r  s         r?   r;   Property.__init__  se    4 
X1*=i ^^TZZ
//4>>+	rA   c                 F    [        U R                  XUU R                  5      $ r  )rL  rg   r  ru  s       r?   rt  Property.rebuild  s     

H)
-- 	rA   c                     U $ r  rH   r  s       r?   r   Property.optimise  r  rA   c                     [        U /5      $ r  r  r  s     r?   r  Property.get_firstset  r  rA   c                     gr  rH   rp  s    r?   r  Property.has_simple_start  r  rA   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   rg   r  s       r?   r  Property._compile  sl    ==[ E>>\!EXE"333doow67

KLLrA   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 )NrZ   r   r/   i  z{}PROPERTY {} {}:{}{}{}rp   r  )
PROPERTY_NAMESrg   r  r9   r  r  r   r  r   r  )r<   r  r   r   r   rg   s         r?   r  Property.dump  sw    djjB./1gtAwtzzF':;e'..v
4==
!4	$//0Jx.
') 	*rA   c                 ^    [         R                  " U R                  U5      U R                  :H  $ r  )r   has_property_valuerg   r   r  s     r?   r  Property.matches   s"    ((R8DMMIIrA   c                     gr  rH   rp  s    r?   r  Property.max_width#  r  rA   )ro  r   r  r   rg   r   Nr   )rB   rC   rD   rE   r   r  PROPERTYr   PROPERTY_IGNr   r  PROPERTY_REVPROPERTY_IGN_REVr  r;   rt  r   r  r  r  r  r  r  rG   rH   rA   r?   rL  rL    s    j%-@oo%("++7Noo~rT8JHd+R__~
?  	"G (,
+	M*JrA   rL  c                       \ rS rSrSrS rSrg)Prunei&  PRUNEc                 &    [         R                  4/$ r  )r  r6  r  s      r?   r  Prune._compile)  s    ~rA   rH   NrJ  rH   rA   r?   r5  r5  &  s    HrA   r5  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  )rm  r;   lowerr>  r   r   rs  r   r   rb   ro  )r<   r<  r>  r   r   r   s         r?   r;   Range.__init__3  sk    4 

X1*=i^^TZZT]]
//4>>+	rA   c                 F    [        U R                  U R                  XU5      $ r  )r  r<  r>  ru  s       r?   rt  Range.rebuild?  s    TZZX9MMrA   c                    U R                   (       a  U R                  [        -  (       a  U(       a  U $ UR                  [        -  (       a  U R                  [
        -  [
        :w  a  U $ [        R                  " 5       n/ nU H  nU R                  [        U5      s=::  a  U R                  ::  d  M/  O  M3  [        R                  " [        U5      nUR                  [        U Vs/ s H  n[        U5      PM     snU R                  S95        M     U(       d  U $ [        U5      U R                  U R                  -
  S-   :  a  UR!                  SU 5        [#        U5      $ s  snf )Nr   r/   r   )r   r   r   r   r   r  r   r  r<  r   r>  r   r  rc   r  rf   r-  r   )	r<   r   r   r   r  r  r   r  r   s	            r?   r   Range.optimiseB  s   }}T__z%AfK g%4??^+K
+K !668 !BzzSW2

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

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


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

b..DJJ.4==@@.4==@@rA   c                     gr  rH   rp  s    r?   r  Range.max_widthv  r  rA   )ro  r   r<  r   r>  r   Nr   )rB   rC   rD   rE   r   r  r:  r   	RANGE_IGNr   r  	RANGE_REVRANGE_IGN_REVr  r  r;   rt  r   r  r  r  r  rG   rH   rA   r?   r  r  ,  s    :u*=r||NE#:BLLtnbllZ$68H8H~t&<b>N>NPG H.2v
+N>	'ArA   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   iy  FTc                     [         R                  U 5        Xl        X l        X0l        [
        U   U l        U R                  U R                  U R                  4U l        g r  )	rm  r;   r   ro  r   rs  r   rb   ro  )r<   r   ro  r   r   s        r?   r;   RefGroup.__init__  sE    4 	
 1*=NNDJJ?	rA   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)Nra  r/   r`  )r$  ro  r;  r   r  r   r'   r   r  rb   r   ro  rx  s       r?   rz  RefGroup.fix_groups  s    	ETZZDJ DJJ7$))"7"7717MMJJNNDJJ?	  	EE!YY224::>
 EOWmmDDE	Es   B 
C"(B==!CC"c                 D    [        SU R                  U R                  5      er  r  rp  s    r?   r  RefGroup.remove_captures  r  rA   c                 v    SnU(       a	  U[         -  nU R                  U R                  U4   X0R                  4/$ r  )r  r  r   ro  r  s       r?   r  RefGroup._compile  s8    XEdoow67

KLLrA   c                     [        SR                  [        U-  U R                  [        U R
                     5      5        g )Nz{}REF_GROUP {}{})r  r9   r  ro  r  r   r  s      r?   r  RefGroup.dump  s0     ''
DOO
$& 	'rA   c                     [         $ r  r  rp  s    r?   r  RefGroup.max_width  r  rA   c                     S U l         g r  r  rp  s    r?   r  RefGroup.__del__  r  rA   )ro  r   ro  r   r   N)rB   rC   rD   rE   r   r  	REF_GROUPr   REF_GROUP_IGNr   r  REF_GROUP_FLDREF_GROUP_REVREF_GROUP_IGN_REVREF_GROUP_FLD_REVr  r;   rz  r  r  r  r  r  rG   rH   rA   r?   r   r   y  s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G :@ @@PM'rA   r   c                   0    \ rS rSr\R
                  rSrSrg)r  i  SEARCH_ANCHORrH   N)	rB   rC   rD   rE   r  re  r  r  rG   rH   rA   r?   r  r    r:  rA   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   i  Nc                 D    [         R                  U 5        Uc  / nXl        g r  )rm  r;   r  )r<   r  s     r?   r;   Sequence.__init__  s    4 =E
rA   c                 N    U R                    H  nUR                  XU5        M     g r  )r  rz  )r<   r3   r   ry  r|   s        r?   rz  Sequence.fix_groups  s    ALL51 rA   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   r0   r   r   rc   rk  )r<   r   r   r  r|   s        r?   r   Sequence.optimise  sX    A

4)A!X&&QWW%Q  U##rA   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   rg   r   _flush_charactersrc   r  r4  r  r   r5  r  rk  )r<   r   r  r5  r   r|   s    `    r?   r  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##rA   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''):>
 ?r<  c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r?  r  r|   s     r?   r  %Sequence.is_atomic.<locals>.<genexpr>       5*Q;;==*rC  r  r  rp  s    r?   r  Sequence.is_atomic      5$**555rA   c                     gr  rH   rp  s    r?   r  Sequence.can_be_affix  r  rA   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  rM  ry  s     r?   r  *Sequence.contains_group.<locals>.<genexpr>  s     :z!##%%zrC  )r  r  rp  s    r?   r  Sequence.contains_group  s    :tzz:::rA   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rA   c                 t    [        U R                  5      =(       a    U R                  S   R                  5       $ r  )r   r  r  rp  s    r?   r  Sequence.has_simple_start  s'    DJJDDJJqM$B$B$DDrA   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$ rS  )r  r   r   )r<   r   ry  seqr   r|   s         r?   r  Sequence._compile	  sF    jjdd)CAKK		'12  rA   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# rA   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  ro  rp  s     r?   r  -Sequence._flush_characters.<locals>.<genexpr>  s     ?Jqz$**Jrr  r/   r   r   )r   r  r   r  r   _fix_full_casefoldr5  rf   rc   r   r   r  )r   r5  r   r  literalsr  charss   `      r?   rs  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rA   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 )Nrp   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rc  r   r/   r   )r   r  r   r  re   r<  findrc   rf   r   _merge_chunksr4  r   r  )r5  r   expandedr   chunksrw   foundr4   r  r   r#  s              r?   r  Sequence._fix_full_casefold4  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$ )NrW   r   r/   )rf   sortrE  rc   )r  r   r#  
new_chunksr|   rw   s         r?   r  Sequence._merge_chunksV  sx    v;?MAY

13LDAx#k!!5,/s ! 	5,'rA   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>l  s     4A::<<rC  r|  rp  s    r?   r  Sequence.is_emptyk  s    4444rA   c                 n    [        U 5      [        U5      L =(       a    U R                  UR                  :H  $ r  )r  r  r  s     r?   r  Sequence.__eq__n  r  rA   c                 :    [        S U R                   5       5      $ )Nc              3   @   #    U  H  oR                  5       v   M     g 7fr  r  ry  s     r?   r  %Sequence.max_width.<locals>.<genexpr>r  r{  rC  )sumr  rp  s    r?   r  Sequence.max_widthq  r~  rA   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$ r2  )r  r  )r<   r   r  r  r|   r  r  s          r?   r  Sequence.get_required_stringt  s\    jjdd)CA,,W5HCMFs{"	  t|rA   rj  r  )rB   rC   rD   rE   r;   rz  r   r  r  r  r  r  r  r  r  r  r  rs  r  r  r  r  r  r  rG   rH   rA   r?   r   r     s    2
$$$L6; E	$  6  B  (5G6rA   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  i  TFc                 @   [         R                  U 5        Xl        [        U5      U l        [        U5      U l        [        U   U l        [        U5      U l	        SU l
        U R                  U R                  U R                  U R                  U R                  4U l        g r  )rm  r;   r   r   r  r   r   rs  r   r   
char_widthrb   ro  )r<   r   r  r   r   r   s         r?   r;   SetBase.__init__  sr    4 	5\
X1*=i^^TZZ
//4>>+	rA   c                     [        U 5      " U R                  U R                  XU5      R                  U R                  S5      $ r  )r  r   r  r   ru  s       r?   rt  SetBase.rebuild  s4    Dz$))TZZ
Xdii/	0rA   c                     [        U /5      $ r  r  r  s     r?   r  SetBase.get_firstset  r  rA   c                     gr  rH   rp  s    r?   r  SetBase.has_simple_start  r  rA   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   rc   r  r  )r<   r   ry  r   r   rj   s         r?   r  SetBase._compile  s    ==[ E>>\!EXEdoow67?@AKK		$  	RVVJrA   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  r9   r  r  r  r   r  r   r  r  )r<   r  r   ry   s       r?   r  SetBase.dump  s[    k  &$--
4==
!9T__#=? 	@AFF6A:w' rA   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  rc   r  r   r   )	r<   r   r   r  r  seenr   r  r   s	            r?   _handle_case_foldingSetBase._handle_case_folding  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  r_  )r  r  s     r?   r  $SetBase.max_width.<locals>.<genexpr>  s     2T63v;;Trc  )r   r   r   r   r   r   r  r   r  r   r  r   r   r  r   rE  )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2rA   c                     S U l         g r  r  rp  s    r?   r  SetBase.__del__  r  rA   )ro  r   r  r   r  r   r   N)rB   rC   rD   rE   r   r;   rt  r  r  r  r  r  r  r  rG   rH   rA   r?   r  r    s7    -1f+0 (&<32rA   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      $ )NrW   r   r/   r   c              3   D   >#    U  H  oR                  TTS S9v   M     g7f)Tr   N)r   )r  rj   r   r   s     r?   r  #SetDiff.optimise.<locals>.<genexpr>  s'      
 GH::dGD:A
    )	r  rf   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6rA   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   rj   s      r?   r  SetDiff.matches  sB    JJqM!!"%Gdjjm.C.CB.G*GMM!!rA   rj  Nr   )rB   rC   rD   rE   r   r  r  r   SET_DIFF_IGNr   r  SET_DIFF_REVSET_DIFF_IGN_REVr  r  r   r  rG   rH   rA   r?   r  r    s    j%-@oo%("++7Noo~rT8JHd+R__~
?  	"G
 H7"rA   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   r0   r  r   r   rc   rf   r   r   r   r   r  r<   r   r   r   r  rj   s         r?   r   SetInter.optimise  s    A

4
6A!X&&1::QWW%Q  u:?8&&$// ' ((0(GH 5\
((66rA   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  ry   r   s     r?   r  #SetInter.matches.<locals>.<genexpr>!       2z!		"zr  )r  r  r   r  s    ` r?   r  SetInter.matches   $    2tzz22MM!!rA   rj  Nr   )rB   rC   rD   rE   r   r  r  r   SET_INTER_IGNr   r  SET_INTER_REVSET_INTER_IGN_REVr  r  r   r  rG   rH   rA   r?   r  r    s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G
 H7$"rA   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   r0   r  r   r   rc   rf   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6rA   c                 n    SnU R                    H  nX#R                  U5      :g  nM     X R                  :H  $ r  r  )r<   r   rj   ry   s       r?   r  SetSymDiff.matches>  s4    AYYr]"A  MM!!rA   rj  Nr   )rB   rC   rD   rE   r   r  r  r   SET_SYM_DIFF_IGNr   r  SET_SYM_DIFF_REVSET_SYM_DIFF_IGN_REVr  r  r   r  rG   rH   rA   r?   r  r  $  s    *e1DHe,boo@!!FD>23F3F4"11Hd3CND123J3J	LG
 H7$"rA   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   iE  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   r0   r   r   r   r   rc   r   rL  r   rg   r   r   rf   r   r   r  )r<   r   r   r   r  rj   
propertiesry   s           r?   r   SetUnion.optimiseM  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6rA   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  r0   r   rc   rg   r  r   rf   r  r  STRINGr   r   r   r  )
r<   r   ry  r   r5  othersrj   r   r   valuess
             r?   r  SetUnion._compilem  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rA   c                 ^   ^ [        U4S jU R                   5       5      nX R                  :H  $ )Nc              3   D   >#    U  H  oR                  T5      v   M     g 7fr  r  r  s     r?   r  #SetUnion.matches.<locals>.<genexpr>  r  r  )r  r  r   r  s    ` r?   r  SetUnion.matches  r  rA   rj  Nr   )rB   rC   rD   rE   r   r  r  r   SET_UNION_IGNr   r  SET_UNION_REVSET_UNION_IGN_REVr  r  r   r  r  rG   rH   rA   r?   r   r   E  s    z5.A5)2<<.:0@0@:
C!!Hd#3R5E5Etb22	4G
 H7@ D"rA   r   c                   0    \ rS rSrSr\R                  rSrg)Skipi  SKIPrH   N)	rB   rC   rD   rE   r  r  r  r  rG   rH   rA   r?   r  r    s    HggGrA   r  c                   0    \ rS rSr\R
                  rSrSrg)r   i  START_OF_LINErH   N)	rB   rC   rD   rE   r  r  r  r  rG   rH   rA   r?   r   r     r:  rA   r   c                   0    \ rS rSr\R
                  rSrSrg)r   i  START_OF_LINE_UrH   N)	rB   rC   rD   rE   r  r	  r  r  rG   rH   rA   r?   r   r           G HrA   r   c                   0    \ rS rSr\R
                  rSrSrg)r   i  START_OF_STRINGrH   N)	rB   rC   rD   rE   r  r  r  r  rG   rH   rA   r?   r   r     r
  rA   r   c                   0    \ rS rSr\R
                  rSrSrg)StartOfWordi  START_OF_WORDrH   N)	rB   rC   rD   rE   r  r  r  r  rG   rH   rA   r?   r  r    r:  rA   r  c                   (   \ rS rSr\S4\R                  \S4\R                  \	S4\R                  \
S4\R                  \S4\R                  \S4\R                  \	S4\R                  \
S4\R                  0r\4S jrS rS rS rS rS	 rS
 rSrg)r  i  FTc                    [        U5      U l        [        U   U l        U R                  [        -  [        :X  aR  / nU R                   H?  n[
        R                  " [        [        U5      5      nUR                  S U 5       5        MA     OU R                  n[        U5      U l
        SU l        U R                  U R                  U R                  4U l        g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr  r  r  s     r?   r  "String.__init__.<locals>.<genexpr>  s     (@AQrc  F)r   r5  rs  r   r  r   r   r  r  r   r  requiredrb   ro  )r<   r5  r   r  r   r  s         r?   r;   String.__init__  s    
+1*=OOn,? "))*;SYG!(((@(@@ ( !%!&'8!9NNDOOT__D	rA   c                 p    U(       a  SnOSn[        [        U R                  U   U R                  S9/5      $ )Nr3  r   r   )r   r   r5  r   )r<   r   r4   s      r?   r  String.get_firstset  s:    CCIdooc2__& ' ( 	(rA   c                     gr  rH   rp  s    r?   r  String.has_simple_start  r  rA   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   rf   r  r  s       r?   r  String._compile  sj    XE==[ Edoow67
d$$
%')-)?)?@ A 	ArA   c                     [        SR                  S U R                   5       5      5      R                  S5      n[	        SR                  [        U-  U[        U R                     5      5        g )Nrp   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rc  r  z{}STRING {}{})	r  re   r5  r  r  r9   r  r  r   r  s       r?   r  String.dump  sS    @@@AHHNo$$Vf_g
DOO
$& 	'rA   c                 ,    [        U R                  5      $ r  )rf   r  rp  s    r?   r  String.max_width  s    4))**rA   c                 
    SU 4$ r  rH   r  s     r?   r  String.get_required_string  s    $wrA   )ro  r   r5  r  r  N)rB   rC   rD   rE   r   r  r  r   
STRING_IGNr   r  
STRING_FLD
STRING_REVSTRING_IGN_REVSTRING_FLD_REVr  r;   r  r  r  r  r  r  rG   rH   rA   r?   r  r    s    		J+>^U$;R]]tnbmmj$%79J9J'=	G /5 E"(A'
+rA   r  c                       \ rS rSrS rSrg)r4  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 )Nrp   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&&/rc  r  z{}LITERAL MATCH {}{})	re   r5  r  r  r  r9   r  r  r   )r<   r  r   literalr  s        r?   r  Literal.dump  sX    '':$//::.''-$++FVOW
DOO
$& 	'rA   rH   N)rB   rC   rD   rE   r  rG   rH   rA   r?   r4  r4    s    'rA   r4  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   rs  r   rb   ro  set_keynamed_lists_usedrf   r  r   r   r0   r1   r   rc   r   r  r   r   )r<   r   r   r   re  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  r9   r  r   r  r   r  s      r?   r  StringSet.dump  s0    !((&$))
DOO
$& 	'rA   c                     S U l         g r  r  rp  s    r?   r  StringSet.__del__  r  rA   )ro  r   r   r   r   r2  N)	rB   rC   rD   rE   r   r;   r  r  rG   rH   rA   r?   r   r     s    .4 AB'rA   r   c                   b    \ 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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  )rY  r  s    r?   r  !Source.__init__.<locals>.<lambda>  s
    uaSzrA   r   F)	r0   r1   r   r  	char_typedecoder4   r_  rX  )r<   r   s     r?   r;   Source.__init__  sN    fc"" K DN --	2DK1DN!3Q<rA   c                 0   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#   $ ! [
         a    US S s $ [         a    US S s $ f = fNr/   rS  r-   r   )r   r4   r_  isspacere  rd  r;  )r<   override_ignorer   r4   s       r?   rh  Source.peek  s    hh	   {**,,q+$ll45  ; 	 3Q< 	 3Q<	 s   AA3 3BBB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rE  )r   r4   r_  rF  re  rd  r;  rf   )r<   rG  r   r4   r   s        r?   r   
Source.get4  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/   rS  r-   rp   )
r   r4   r_  rf   rF  re  rc   re   rd  r;  )r<   r5   r   r4   	substrings        r?   get_manySource.get_manyP  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rL  )
r   r4   r_  rF  re  rc   rd  rf   r;  re   )r<   test_setrZ  r  r   r4   rM  s          r?   rL  Source.get_whilev  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/   rS  r-   )r   r4   r_  rF  re  rd  rf   r;  )r<   rQ  rZ  r   r4   s        r?   
skip_whileSource.skip_while  s    hh	#  {**,,q+$ll45 +1g=q  {h.7:1HC {h.7: H 	#6{DH 	#6{DH	#s   A:B B C9CCc                    U R                   nU R                  nU R                  (       a]   U HO  n X#   R                  5       (       a  US-  nOX#   S:X  a  UR                  " SU5      nOOM<  X#   U:w  a    gUS-  nMQ     X0l        gUR                  " X5      (       d  gU[        U5      -   U l        g! [
         a     g[         a     gf = f)NTr/   rS  r-   F)	r   r4   r_  rF  re  rd  r;  rN  rf   )r<   rM  r   r4   r   s        r?   r   Source.match  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'   r9   r   r4   )r<   rM  s     r?   r^  Source.expect  s8    zz)$$++I6TXXNN %rA   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/   rS  r-   )r   r4   r_  rF  re  rf   rd  r;  )r<   r   r4   s      r?   at_endSource.at_end  s    hh	  {**,,q+$ll45  #f+%% 	 		s   AA6 6
B	BB)rA  r_  r4   rX  r   Nr   )r/   )TF)T)rB   rC   rD   rE   rF   r;   rh  r   rN  rL  rT  r   r^  r[  rG   rH   rA   r?   r=  r=    s6    7
  0 8$&L.!`#:%NOrA   r=  c                   >    \ rS rSrSrSS0 4S jrS
S jrS rS rS	r	g)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_namerA  r3  open_groupsr  r  r  r  )r<   r   rA  r  s       r?   r;   Info.__init__  s     5I/JJ
!"" " "  rA   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$ ri  )	r  r   r  rb  rc  rf   r  rc   r  )r<   r   ro  group_aliass       r?   r]  Info.open_group  s      $$T*=  A% <4#3#34??#J 
 $$E).  &)-&$$$   3 34q89K/4,E&'+'<'<'@'@'JQ'Ne$rA   c                 8    U R                   R                  5         g r  )rc  r  rp  s    r?   r`  Info.close_group4  s    rA   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   rc  )r<   r   r	  ro  s       r?   rw  Info.is_open_group7  s[     ::-A/h<<>>IE$$((.E((((rA   )rA  r  r   r  r  r  r  rb  r  r  r3  r  rc  r  r  )
rB   rC   rD   rE   rF   r;   r]  r`  rw  rG   rH   rA   r?   r^  r^    s     ($r !&4)rA   r^  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  ro  r   r   r   r   r0   r  rc   r  rf   r  r  r  additional_groups)r   r  r  rm  callr   ry  r  r  revfuzdef_inforo  s                r?   _check_group_featuresrr  E  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.rA   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.Tr3  r   rH   )r  r   r   r  r  r   r   r  )r  r   
req_offsetr  	req_flags	req_charss         r?   _get_required_stringrw  l  s{     "55d57?6KLJ "J''	'!I..	
		)++rA   c                   $    \ rS rSrSS jrS rSrg)r(   i  c                 @   Xl         / nU H  u  pE[        U5      n[        X&R                  5      n[	        UR
                  [        -  5      Ul        [        Xg5      nUR                  5       (       d!  [        SUR                  UR                  5      eUR                  UR                  5       5        M     [        U5      n[        U5       V	V
s/ s H  u  p[!        XyS-   U
5      PM     nn	n
[#        U5      n[	        UR
                  [$        -  5      nUR'                  X{5      nUR)                  U5      n[+        UUR
                  5      u  pn[-        Xx5        UR.                  (       a!  [        SWR                  UR                  5      e[	        UR
                  [$        -  5      nUR1                  U5      [2        R4                  4/-   n[7        U5      nUR9                  5       (       d+   [;        XxR=                  U5      5      n[7        U5      nUU-   nUR
                  [@        -  =(       d    [B        nUS[D        [F        4;  a  [I        S5      e[J        R0                  " S U[L        -  U-  U0 0 0 / XU[O        U5      5      U l(        g s  sn
n	f ! [>         a     Nf = f)Nzunbalanced parenthesisr/   z(recursive regex not supported by Scannerr   z5VERSION0 and VERSION1 flags are mutually incompatible))lexiconr=  r^  rA  r   r   r&   r_  r   r[  r'   r   r4   rc   r  	enumerater  r   r   r   r  rw  rr  r  r   r  SUCCESSr   r  r   r  rR   r  r  r    r"   r;  r   r  rf   scanner)r<   rz  r   patternsphraseactionr   r   r  r  rz   r   rt  rv  ru  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__)rc   r}  r   r#  rz  	lastindexr   ro  )	r<   r   r8  rc   r   ry   rj   jr  s	            r?   scanScanner.scan  s    $$V,22AAv\\!++/215Fvz**
ggi0!vA  ac|##rA   )rz  r   r}  N)r   )rB   rC   rD   rE   r;   r  rG   rH   rA   r?   r(   r(     s    GR$rA   r(   r  r-   	)ru   rv   rx   nr{   tr^  DigitTBlankSpaceWord)r  r	   hr|   r   r~   r#   r  )r  r	   r|   r   r~   r#   )r   rv   r   Krj   r   Zz)rv   r   rj   r   )FAILr   r6  r  )r   r   r  r`  (  enumr   r  collectionsr   regexr   __all__r:   r'   rJ   rO   rR   IntFlagr)   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   r  r  r   ra  r  SCOPED_FLAGS	frozensetascii_lettersr/  r<  r3  r  	octdigitsr  	hexdigitsr  r   r  r  r  get_code_sizeBYTES_PER_CODEBITS_PER_CODEr  r  r   r   r  r  rs  r  OPCODESr   r  r{  r2  ry   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+  r2  r0  r1  r,  rF  r)  r#  r   ra  rb  r[  rc  r}  rd  re  rf  ri  rg  r  r  r  rj  r  r\  r  r  r  r   r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r%  r*  r9  r?  r   rJ  rM  r  r[  rU  rW  rV  r  r  r  r  r  r  r  r  r  rk  rm  r  r   r   r   r  r   r   r  r  r   r~  r-  r0  r3  r   r   r<  r   r   rC  rF  r  r  rp  r	  r  r  r  r
  rz  r  r  rL  r5  r  r   r  r   r  r  r  r  r   r  r   r   r   r  r  r4  r   r=  r^  rr  rw  r(   get_propertiesrK  r)  r  r  rP  r  r   r   prop_valuesrE  rf   val_namerR  r  r  r  r  dictr  r   r  r  r  r  r  rl  rH   rA   r?   <module>r     s       # *I *>	y 		 		Y 	1 1j 					%%!!
				








~~KKKKKKKKKKKKKKKKKKKKKKKK\\\\KKKKKK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=Tl@5 ))<4 <01;z
A6
H4$Z*x"?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t tl?) ?)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		rA   