
    Xi$>                    `   d dl Z d dlZd dlZd dlmZ d dlmZ g dZ G d de          Z	 G d de          Z
 G d	 d
e          Z G d de          Z G d de j                  Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej        Zej         Z ej!        Z!ej"        Z"ej#        Z#ej$        Z$ej%        Z%ej&        Z&ej'        Z'ej(        Z(ej)        Z)ej*        Z*ej+        Z+ej,        Z,ej-        Z-ej.        Z.ej/        Z/ej0        Z0eZ1eez  Z2eez  ez  Z3ed eeiZ4e2ez  ez  ez  ez  ez  Z5eez  ez  ez  ez  ez  e3z  Z6 e7ej8                  Z9 e7ej:                  Z;e9e;z  Z< e7ej=                  Z> e7ej?                  Z@ e7d           e7dg          z  ZAe< e7d          z  ZBe< e7d          z  ZCdZD ejE                    ZFeFdz  ZGdeGz  dz
  ZHeeeeeeeeeeeeeeedZIeez  ZJd ZKeez  ZLeeLz  ZMd d ed eeeLeLiZNddddZOdZP G d d          ZQ eQ            ZR eSePT                                          D ]\  ZUZV eWeReVeU           ddZXd ZYd  ZZd! Z[d" Z\d# Z]d$ Z^d% Z_dd'Z`d( Zad) Zbd* Zcd+ Zdd, Zed- Zfd. Zgd/d0d1d2Zhd3 Zid4 Zjd5 Zkd6 Zld7 Zmd8 Znd9 Zod: Zpd; Zqd< Zrd= Zsd> Ztd? Zud@ ZvdA ZwdB ZxdC ZydD ZzdE Z{dF Z|dG Z}dH Z~dI ZdJ ZdK ZdL ZdM ZdN ZdO ZddPZdQ ZdR ZdS ZdT ZdU ZdV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Zde Zdf Zdg Zdh Z ediT                                          Z edjT                                          ZddkZdl Zdm Zdn Zdo ZdpZdZdZdZdZdqZdZdrdsdtZeKdeduedeLdviZdw Z G dx dy          Z G dz d{e          Z G d| d}e          Z G d~ de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d deæ          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d          Z G d de          Z G d deʦ          Z G d de          Z G d de          Z G d deʦ          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G dĄ de          Z G dƄ de          Z G dȄ deئ          Z G dʄ deئ          Z G d̄ deئ          Z G d΄ deئ          Z G dЄ de          Z G d҄ de          Z G dԄ deަ          Z G dք de          Z G d؄ de          Z G dڄ de          Z G d܄ de          Z G dބ de          Z G d d          Z G d d          Zd Zd Z G d d          Z ej                    Zi Ze                                D ]w\  Z\  ZZe                    edi f          \  ZZ eeee          Zeefee<   e                                D ]*\  ZZ ee                    ed          ee          ee<   +xddddddddZdZdZ eddd           eddd&           eddd           eddd           eddd&           eddd           eddd&          dZ ee          Ze                     eddde           eddd&e           eddde           eddd&e           eddde           eddd&e          d            ee          Ze                     eddde           eddd&e           eddde           eddd&e           eddde           eddd&e          d            e             e             ed&           eͦ             e             eŦ             e¦            dZ  ee           Ze                     ee           ed&e           ee           ee          d            ee           Ze                     ee           ed&e           ee           ee          d            ee           Ze                     e             ed&           e             e            d            eƦ             eƦ             eӦ             eݦ            dZdS (       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                       e Zd ZdZddZdS )r'   a  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                    t          |t                    rdnd}|| _        || _        || _        |}|{|                    |d|          dz   | _        ||                    |d|          z
  | _        d	                    ||          }||v r#|d	                    | j        | j                  z  }t                              | |           d S )N
   
r      z{} at position {}z (line {}, column {}))
isinstancestrmsgpatternposcountlinenorfindcolnoformat	Exception__init__)selfmessager2   r3   newlines        i/var/www/development/aibuddy-work/election-extract/venv/lib/python3.11/site-packages/regex/_regex_core.pyr:   zerror.__init__*   s    $Wc22=$$3?!--C881<DKw}}Wa===DJ)00#>>G'!!299$+*   	4)))))    )NN)__name__
__module____qualname____doc__r:    r?   r>   r'   r'      s2        	 	* * * * * *r?   r'   c                       e Zd ZdS )_UnscopedFlagSetNr@   rA   rB   rD   r?   r>   rF   rF   =           Dr?   rF   c                       e Zd ZdS )
ParseErrorNrG   rD   r?   r>   rJ   rJ   A   rH   r?   rJ   c                       e Zd ZdS )_FirstSetErrorNrG   rD   r?   r>   rL   rL   E   rH   r?   rL   c                       e Zd ZdxZZdxZZdxZZdxZ	Z
dxZZdxZZdxZZdxZZd	xZZd
xZZdxZZdxZZdxZZdxZZdxZZ dxZ!Z"dxZ#Z$d Z%e&j'        Z'dS )r)      i   i   i   i @           i   i          i       i   @   r.   c                 z   | j         
d| j         z  S | j        }g }|dk     }|r| }| j        D ]4}||j        z  r(||j         z  }|                    d|j         z             5|r"|                    t	          |                     d                    |          }|rt          |          dk    rd|z  }nd|z  }|S )Nzregex.%sr   |r.   z~(%s)z~%s)_name__value_	__class__appendhexjoinlen)r;   valuemembersnegativemress         r>   __repr__zRegexFlag.__repr__]   s    ;"++19 	FE 	6 	6Aqy  6!)#zAH4555 	'NN3u::&&&hhw 	"7||amck
r?   N)(r@   rA   rB   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   rd   object__str__rD   r?   r>   r)   r)   I   s        AA	AAAA
AA	AAAABBAAA  : nGGGr?   r)   z()|?*+{^$.[\# z -z &_-.)||~~&&--rQ   r.   )abefir   rb   prsur   r!   wxrO   rP   )rv   rt   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                       e Zd ZdS )	NamespaceNrG   rD   r?   r>   rx   rx   )  rH   r?   rx      c                    t          |                                           }t          |          |z
  }|dk     rdS ||z  |z   }ddl}t	          |d          sdS |                    ||          D ]}		 | |	= # t          $ r Y w xY w|                                 i }
t          |           D ]3\  }}}}}}|||||||f<   	 |||f         |
||f<   $# t          $ r Y 0w xY w|                                 |                    |
           dS )aC  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keysr^   randomhasattrr{   KeyErrorclearupdate)
cache_dict	args_dictlocale_sensitive
max_lengthdivisor
cache_keysoveragenumber_to_tossr~   
doomed_keysensitivity_dictr2   pattern_typeflagsargsdefault_versionlocales                    r>   _shrink_cacher   0  s~    z(())J*oo
*G{{ 	7*W4N MMM68$$  	mmJ??  
	:&& 	 	 	D	
 OOGLZGXGX  CudOVKO	'<GH	6F|U\G\6]\7233 	 	 	D	 ,-----s$   3A77
BB C
CCc                 j    | j         }|t          z  dk    r
|| j        z  }t          j        ||          S )zFolds the case of a string.r   )r   _ALL_ENCODINGSguess_encodingr   	fold_case)infostringr   s      r>   
_fold_caser   b  s9    JE1$$$$E6***r?   c                 X    t          t          j        | j        |                    dk    S z$Checks whether a character is cased.r.   )r^   r   get_all_casesr   )r   chars     r>   
is_cased_ir   j  s$    v#DJ5566::r?   c                 N    t          t          j        | |                    dk    S r   )r^   r   r   )r   r   s     r>   
is_cased_fr   n  s"    v#E40011A55r?   c                     t          | j        t          z            }t          | ||          }|rt	          |t
                    rg S |                    |          S )z&Compiles the firstset for the pattern.)boolr   r   _check_firstsetr/   AnyAllcompile)r   fsreverses      r>   _compile_firstsetr   r  sY    4:'((G	w	+	+B B'' 	 ::gr?   c                    |rd|v rdS t                      }t          }|D ]Y}t          |t                    r
|j        s dS ||j        z  }|                    |                    t                               Z|t          t          z  k    rdS t          | t          |          |t           z  d          }|                    | |d          }|S )z$Checks the firstset for the pattern.N
case_flagsTr   	zerowidthin_set)setNOCASEr/   	Characterpositiver   add
with_flagsr   r   SetUnionlistoptimise)r   r   r   r`   r   rp   s         r>   r   r   |  s     t eeGJ 5 5a## 	AJ 	44 	al"
ALLFL334444h+,,t 
$W*y2H
 
 
B	T74	0	0BIr?   c                 >    g }| D ]}|                     |           |S )z(Flattens the code from a list of tuples.)extend)code	flat_codecs      r>   _flatten_coder     s3    I  r?   c                 X    | j         t          z  }| j         t          z  r|t           z  }|S )zMakes the case flags.)r   
CASE_FLAGSr   r   )r   r   s     r>   make_case_flagsr     s0    J#E zE (Lr?   Fc                 `    |rt          |          S t          |t          |                     S )zMakes a character literal.r   )r   r   )r   r_   r   s      r>   make_characterr     s3      Ut'<'<====r?   c                 B    t          | ||t          |                     S )zMakes a group reference.r   )RefGroupr   )r   namepositions      r>   make_ref_groupr     s!    D$_T5J5JKKKKr?   c                 @    t          | |t          |                     S )zMakes a string set.r   )	StringSetr   )r   r   s     r>   make_string_setr     s    T4OD,A,ABBBBr?   c                 P    |r|S |                     t          |                     S )zMakes a property.r   )r   r   )r   propr   s      r>   make_propertyr     s+     ??od&;&;?<<<r?   c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          |          S )zParses a pattern, eg. 'a|b|c'.rW   r.   r   )parse_sequencematchr[   r^   Branch)sourcer   branchess      r>   _parse_patternr     s    vt,,-H
,,s

 6vt44555 ,,s

 6 8}}{(r?   c           	         dg}t          |          }	 | j        }|                                 }|t          v ra|dv r	|| _        n|dk    r&|                    t          | |d                     nY|dk    r:t          | |          }|t          |          }n0|                    |           n|dk    r|j        t          z  r#|                    t                                 n|j        t          z  r#|                    t                                 n|                    t                                 n|dk    r%|                    t          | |                     na|d	k    r|j        t          z  rU|j        t          z  r#|                    t                                 n|                    t!                                 n|                    t#                                 n|d
k    r|j        t          z  rU|j        t          z  r#|                    t%                                 n|                    t'                                 nj|j        t          z  r#|                    t)                                 n8|                    t+                                 n|dv rt-          | ||          }|r+t/          | ||||||           |                    d           nt1          | |||          }|r*t3          | |||||           |                    d           n|                    t5          t7          |          |                     nc|                    t5          t7          |          |                     n1|                    t5          t7          |          |                     d |D             }t9          |          S )zParses a sequence, eg. 'abc'.NTz)|\F(.[^$z?*+{r   c                     g | ]}||S NrD   ).0items     r>   
<listcomp>z"parse_sequence.<locals>.<listcomp>  s    >>>T-=-=-=-=r?   )r   r3   getSPECIAL_CHARSr[   parse_escapeparse_parenr   r   r   r$   AnyUAny	parse_setr   StartOfLineUStartOfLineStartOfString
EndOfLineU	EndOfLineEndOfStringLineUEndOfStringLineparse_quantifierapply_quantifierparse_fuzzyapply_constraintr   ordSequence)	r   r   sequencer   	saved_poschelementcountsconstraintss	            r>   r   r     s   vH &&JKGJ	ZZ\\Tzz&
tVT5 A ABBBBs%fd33?!0!6!6JJOOG,,,,s:& +OOFHH----Z$& +OODFF++++OOCEE****s	&$ 7 78888s:	) 5zD( 7 7777 6666OOMOO4444s:	) 	;zD( 5 
5555 	4444zD( ; (8(:(:;;;; (9(9::::v)&$;; 2$VT6:r+ + +OOD)))) #.fdB
"K"KK" 2({J#X/ / / ---- !	#b''%/)1 )1 )1 2 2 2 2 	#b''j I I IJJJJ OOIc"gg*EEEFFFWKGZ ?>>>>HHr?   c                    |                                 }|.|rt          d| j        |          t          d| j        |          t          |t          t
          t          f          rt          d| j        |          |\  }}	| j        }|                                 }|dk    rt
          }
n|dk    rt          }
n|| _        t          }
|	                                s|dk    s|	dk    r |
|||	          }|
                    |           d S )Nzmultiple repeatznothing to repeat?+r.   )popr'   r   r/   GreedyRepeat
LazyRepeatPossessiveRepeatr3   r   is_emptyr[   )r   r   r   r   r   r   r   r   	min_count	max_countrepeateds              r>   r   r   "  s   llnnG 	E)6=)DDD'	BBB'L*6FGHH A%v}i@@@!Iy
I	B	Syy	s# 
  :9>>Y!^^(7Iy99OOGr?   c                 0   |                                 }|t          d| j        |          t          |t                    r1t          |j        |          |_        |                    |           d S |                    t          ||                     d S )Nznothing for fuzzy constraint)r   r'   r   r/   GroupFuzzy
subpatternr[   )r   r   r   r   r   r   r   s          r>   r   r   B  s    llnnG2FM9MMM '5!! 5"7#5{CC     g{3344444r?   )r   r.   r   Nr.   N)r   *r   c                 t    t                               |          }|r|S |dk    rt          |           }|r|S dS )zParses a quantifier.{N)_QUANTIFIERSr   parse_limited_quantifier)r   r   r   qr   s        r>   r   r   R  sJ    A 	Syy)&11 	M4r?   c                      | duo
| t           k    S )z,Checks whether a count is above the maximum.N	UNLIMITED)r4   s    r>   is_above_limitr  a  s    3)!33r?   c                    | j         }t          |           }|                     d          r4t          |           }t          |pd          }|rt          |          nd}n|s	|| _         dS t          |          x}}|                     d          s	|| _         dS t	          |          st	          |          rt          d| j        |          |||k    rt          d| j        |          ||fS )zParses a limited quantifier.,r   N}zrepeat count too bigz"min repeat greater than max repeat)r3   parse_countr   intr  r'   r   )r   r   r  r  s       r>   r  r  e  s   
IF##I||C /''	 	Q''	&/9C	NNNT		 	"FJ4 #I.	I<< 
ti   FN9$=$= F*FM9EEEY!6!68&-
  	 ir?   c                    | j         }|dk    rdS i }	 t          | |           |                     d          r%t          | |           |                     d          %n# t          $ r || _         Y dS w xY w|                     d          rt	          | ||          |d<   |                     d          st          d| j        | j                   |S )z#Parses a fuzzy setting, if present.r  Nr  :testr  z
expected })r3   parse_fuzzy_itemr   rJ   parse_fuzzy_testr'   r   )r   r   r   r   r   r   s         r>   r   r     s    
I	SyytK---ll3 	2V[111 ll3 	2   
tt ||C I.vtZHHF<< =L&-<<<s   A
A A32A3c                     | j         }	 t          | |           dS # t          $ r || _         t          | |           Y dS w xY w)zParses a fuzzy setting item.N)r3   parse_cost_constraintrJ   parse_cost_equation)r   r   r   s      r>   r  r    s_    
I1fk22222 1 1 1
FK0000001s    !A A c                    | j         }|                                 }|t          v rkt          | ||          }t	          |           }|d||<   dS | j         }t          |           }|s|dz  }|dk     rt          d| j        |          d|f||<   dS |t          v r|| _         | j         }t          |           }t	          |           }	|	t                      t          | ||                                           }t	          |           }|t                      | j         }t          |           }|	s|dz  }|s|dz  }d|cxk    r|k    sn t          d| j        |          ||f||<   dS t                      )zParses a cost constraint.Nr  r.   r   bad fuzzy cost limit)
r3   r   ALPHAparse_constraintparse_fuzzy_compareparse_cost_limitr'   r   DIGITSrJ   )
r   r   r   r   
constraintmax_inccost_posmax_costmin_costmin_incs
             r>   r"  r"    s   
I	B	U{{%fk2>>
%f--?&-K
### zH'//H  A!||2FM8LLL&'kK
###	v
 :#F++%f--?,,%fk6::<<HH
%f--?,, :#F++  	MH 	MHH((((((((.xHHH"*H"4Jllr?   c                     | j         }t          |           }	 t          |          S # t          $ r Y nw xY wt	          d| j        |          )zParses a cost limit.r%  )r3   r  r  
ValueErrorr'   r   )r   r-  digitss      r>   r)  r)    s^    zH  F6{{    &x
@
@@s   ' 
44c                 N    |dvrt                      ||v rt                      |S )zParses a constraint.deis)rJ   )r   r   r   s      r>   r'  r'    s1    	ll	[llIr?   c                 b    |                      d          rdS |                      d          rdS dS )zParses a cost comparator.z<=T<FNr   r   s    r>   r(  r(    s9    ||D t	c		 utr?   c                    d|v rt          d| j        | j                  i }t          | |           |                     d          r%t          | |           |                     d          %t          |           }|t                      t          t          |                     }|s|dz  }|dk     rt          d| j        | j                  ||d<   ||d<   dS )	zParses a cost equation.costzmore than one cost equationr   Nr.   r   r%  max)	r'   r   r3   parse_cost_termr   r(  rJ   r  r  )r   r   r;  r,  r.  s        r>   r#  r#    s    16=&*MMMDFD!!!
,,s

 &%%% ,,s

 & "&))Gll;v&&''H A!||*FM6:FFFDKKr?   c                     t          |           }|                                 }|dvrt                      ||v rt          d| j        | j                  t          |pd          ||<   dS )zParses a cost equation term.diszrepeated fuzzy costr.   N)r  r   rJ   r'   r   r3   r  )r   r;  coeffr   s       r>   r=  r=    sf    E	B	ll	Tzz)6=&*EEE5:ADHHHr?   c                    | j         }|                                 }|t          v r|dk    rt          | |d          S |dk    rH|j        t
          z  rt                      S |j        t          z  rt                      S t                      S |dk    rt          | |          S t          d| j        |          |rt          t          |          |          S t          d| j        |          )Nr   Fr   r   zexpected character setr   )r3   r   r   r   r   r   r   r$   r   r   r   r'   r   r   r   )r   r   r   r   r   s        r>   r   r   (  s    
I	B	]::e4443YYzF" xxd" vvuu3YYVT***0&-KKK	 HRZ8888,fmYGGGr?   c                 6    |                      t                    S )z0Parses a quantifier's count, which can be empty.)	get_whiler*  r9  s    r>   r  r  B  s    F###r?   c                    | j         }|                     d          }|dk    rV| j         }|                     d          }|dk    r| j         }|                                 }|dv rt          | |d|dk              S || _         t          |           }|                    |          }|                     d           |j        }	 t          | |          }	|                     d           ||_        t          |j        t          z            | _
        n-# ||_        t          |j        t          z            | _
        w xY w|                                 t          |||	          S |dv rt          | |d|dk              S |d	k    rt          | |          S |d
k    rt          |           S |dk    rt          | |          S |dk    rt!          | |          S |dk    rt#          | |          S |dk    sd|cxk    rdk    rn nt%          | |||          S |dk    rt'          | ||          S |dk    s|dk    r-|                                 t*          v rt-          | |||          S || _         t/          | |          S |dk    r| j         }|                     t3          d          d          }
|
dd                                         rIt6                              |
          }|st9          d| j        |          |                     d           |S || _         |                                }|j        }	 t          | |          }	|                     d           ||_        t          |j        t          z            | _
        n-# ||_        t          |j        t          z            | _
        w xY w|                                 t          |||	          S )z[Parses a parenthesised subpattern or a flag. Returns FLAGS if it's an
    inline flag.
    Tr   r7  =!rF  >)Fr   #r   rW   r   09&r   -r  )>includeNr.   zunknown verb)r3   r   parse_lookaround
parse_name
open_groupexpectr   r   r   r&   ignore_spaceclose_groupr  parse_extensionparse_commentparse_conditionalparse_atomicparse_commonparse_call_groupparse_call_named_grouppeekr*  parse_rel_call_groupparse_flags_subpatternrC  r   isalphaVERBSr'   r   )r   r   r   r   saved_pos_2saved_pos_3r   groupsaved_flagsr
  wordverbs               r>   r   r   F  s    
I	D		B	SyyjZZ99 *KBZ'dB#IFFF %FJf%%DOOD))EMM#*KA+FD99
c"""(
&*4:+?&@&@## )
&*4:+?&@&@#@@@@uj111#FD%sCCC99"6400099 (((99$VT22299---99---99r((((S(((((#FD"kBBB99)&$DDD#IIs(?(?'b+FFF !
%fd333	SyyjD		5991: 	99T??D HNFM;GGGMM#K FJOOE*K9#FD11
c 
"4:#788 !
"4:#7888888uj)))s   %D *D<3%N *N+c                 J   | j         }|                                 }|dk    rt          |           }|                    |          }|                     d           |j        }	 t          | |          }|                     d           ||_        t          |j        t          z            | _	        n-# ||_        t          |j        t          z            | _	        w xY w|
                                 t          |||          S |dk    rbt          | d          }|                     d           |                    |          rt          d| j        |          t          |||          S |dk    s|dk    rt!          | ||          S || _         t          d	| j        |          )
zParses a Python extension.r7  rH  rI  rF  T)allow_numericcannot refer to an open grouprM  unknown extension)r3   r   rS  rT  rU  r   r   r   r&   rV  rW  r  is_open_groupr'   r   r   r^  )r   r   r   r   r   rf  rg  r
  s           r>   rX  rX    s   
I	B	Syy&!!%%cj	='55JMM#$DJ"&tzG';"<"<F %DJ"&tzG';"<"<F<<<<T5*---	Syy&555cd## 	7   dD)444	SyyB#II%fdI>>>FJ
#V]I
>
>>s   #%B1 1*Cc                     	 | j         }|                     d          }|r|dk    rn|dk    r|                     d          }A|| _         |                     d           dS )zParses a comment.TrI  r   N)r3   r   rU  )r   r   r   s      r>   rY  rY    sq    !J	JJt 	AHH99

4  A! FJ
MM#4r?   c                 *   |j         }	 t          | |          }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY wt          |||          S )zParses a lookaround.rI  )r   r   rU  r   r&   rV  
LookAround)r   r   behindr   rg  r
  s         r>   rR  rR    s    *K9#FD11
c 
"4:#788 !
"4:#7888888fh
333   %A *Bc                    |j         }| j        }|                                 }|dk    r|                                 }|dv rt          | |d|dk              S |dk    r.|                                 }|dv rt          | |d|dk              S || _        t	          d| j        | j                  || _        	 t          | d          }|                     d           t          | |          }| 	                    d	          rt          | |          }nt                      }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY w|                                r"|                                rt                      S t          |||||          S )
z Parses a conditional subpattern.r   rE  FrF  r7  Tzexpected lookaround conditionalrI  rW   )r   r3   r   parse_lookaround_conditionalr'   r   rS  rU  r   r   r   r   r&   rV  r  Conditional)r   r   rg  r   r   rf  
yes_branch	no_branchs           r>   rZ  rZ    s   *K
I	B	SyyZZ\\/eR3YOOO99BZ3FD$I    
5v}
*  	 FJ964((c#FD11
<< 	#&vt44II 

Ic 
"4:#788 !
"4:#7888888 !3!3!5!5 zztUJ	9EEEs   5A>E *Fc                    |j         }	 t          | |          }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY wt          | |          }|                     d          rt          | |          }nt                      }|                     d           t          |||||          S )NrI  rW   )
r   r   rU  r   r&   rV  r   r   r   LookAroundConditional)r   r   rr  r   rg  r
  rw  rx  s           r>   ru  ru    s    *K9#FD11
c 
"4:#788 !
"4:#7888888--J||C "6400		JJ	
MM# :z  rs  c                 &   |j         }	 t          | |          }|                     d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY wt          |          S )zParses an atomic subpattern.rI  )r   r   rU  r   r&   rV  Atomic)r   r   rg  r
  s       r>   r[  r[  "  s    *K9#FD11
c 
"4:#788 !
"4:#7888888*rs  c                    |j         }t          | |          g}|j         }|                     d          rT||_         |                    t          | |                     t	          ||j                   }|                     d          T||_         |                     d           t          |          dk    r|d         S t          |          S )zParses a common groups branch.rW   rI  r.   r   )group_countr   r   r[   r<  rU  r^   r   )r   r   initial_group_countr   final_group_counts        r>   r\  r\  .  s     *vt,,-H(
,,s

 E.vt44555 143CDD ,,s

 E
 )D
MM#
8}}{(r?   c                     |dk    rd}n||                      t                    z   }|                     d           t          |||          S )zParses a call to a group.r   rK  rI  )rC  r*  rU  	CallGroup)r   r   r   r3   rf  s        r>   r]  r]  @  sN    	SyyV%%f---
MM#T5#&&&r?   c                 V   |                      t                    }|st          d| j        | j                  t          |          }|dk    r
|j        |z   n|j        |z
  dz   }|dk    rt          d| j        | j                  |                     d           t          |||          S )z"Parses a relative call to a group.zmissing relative group numberr   r.   r   zinvalid relative group numberrI  )	rC  r*  r'   r   r3   r  r~  rU  r  )r   r   r   r3   r3  offsetrf  s          r>   r`  r`  K  s    f%%F P3V]FJOOO[[F)+sDv%%8H68QTU8UEzz3V]FJOOO
MM#T5#&&&r?   c                 l    t          |           }|                     d           t          |||          S )zParses a call to a named group.rI  )rS  rU  r  )r   r   r3   rf  s       r>   r^  r^  Z  s3    vE
MM#T5#&&&r?   c                     d}	 	 | j         }|                                 }|dk    r||                                 z  }|t          |         z  }I# t          $ r
 || _         Y nw xY w|S )zParses a set of inline flags.r   TV)r3   r   REGEX_FLAGSr   )r   r   r   r   s       r>   parse_flag_setr  a  s    E	%
IBSyyfjjll"[_$E	%    


 Ls   A
A A"!A"c                     t          |           }|                     d          r-t          |           }|st          d| j        | j                  nd}|t
          z  rd|_        ||fS )z!Parses flags being turned on/off.rN  z$bad inline flags: no flags after '-'r   T)r  r   r'   r   r3   r   inline_localer   r   flags_on	flags_offs       r>   parse_flagsr  q  s    f%%H||C "6**	 	>j  	 	& "!Yr?   c                    |j         }|j         |z  | z  |_         |j         t          t          z  t          z  z  r|j         t           z  |z  |_         t          |j         t          z            | _        	 t          | |          }| 	                    d           ||_         t          |j         t          z            | _        n-# ||_         t          |j         t          z            | _        w xY w|S )z&Parses a subpattern with scoped flags.rI  )
r   r   r   r   r   r   r&   rV  r   rU  )r   r   r  r  rg  r
  s         r>   parse_subpatternr    s    *K*x'I:5DJ zUV^g-. ?jN?2h>
tzG344F9#FD11
c 
"4:#788 !
"4:#7888888s   4%C *C,c                    t          | |          \  }}|t          z  rt          d| j        | j                  ||z  rt          d| j        | j                  ||j         z  t          z  }|r$|xj        |z  c_        t          |j                  |t           z  }|                     d          rt          | |||          S |                     d          rt          | |||           dS t          d| j        | j                  )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  rI  Nrm  )
r  GLOBAL_FLAGSr'   r   r3   global_flagsrF   r   r  parse_positional_flags)r   r   r  r  new_global_flagss        r>   ra  ra    s3   
 &fd33Hi< %C
-% % 	% ) >
*  	 !D$5#55E 2-- t0111 H||C Ch	BBB||C vtXyAAAt
#V]FJ
?
??r?   c                 n    |j         |z  | z  |_         t          |j         t          z            | _        dS )zParses positional flags.N)r   r   r&   rV  r  s       r>   r  r    s4    *x'I:5DJtzG344Fr?   c                 |   |                      t          d          d          }|st          d| j        | j                  |                                r7|rdnd}|rt          |          |k     rt          d| j        | j                  n/|                                st          d| j        | j                  |S )zParses a name.rO  FrP  zmissing group namer   r.   zbad character in group name)rC  r   r'   r   r3   isdigitr  isidentifier)r   rk  allow_group_0r   	min_groups        r>   rS  rS    s    CIIu55D E(&-DDD||~~ &-AAA	 	D		I 5 55v}j   !6   "" 	5v}j   Kr?   c                 4    t          d | D                       S )z!Checks whether a string is octal.c              3   (   K   | ]}|t           v V  d S r   )
OCT_DIGITSr   r   s     r>   	<genexpr>zis_octal.<locals>.<genexpr>  '      11BrZ111111r?   allr   s    r>   is_octalr        11&111111r?   c                 4    t          d | D                       S )z#Checks whether a string is decimal.c              3   (   K   | ]}|t           v V  d S r   )r*  r  s     r>   r  zis_decimal.<locals>.<genexpr>  s&      --rV|------r?   r  r  s    r>   
is_decimalr    s    --f------r?   c                 4    t          d | D                       S )z'Checks whether a string is hexadecimal.c              3   (   K   | ]}|t           v V  d S r   )
HEX_DIGITSr  s     r>   r  z!is_hexadecimal.<locals>.<genexpr>  r  r?   r  r  s    r>   is_hexadecimalr    r  r?   c           
         | j         }d| _         |                                 }|| _         |st          d| j        | j                  |t
          v rt          | ||t
          |         ||          S |dk    rO|sM| j        }	 t          | |          S # t          $ r
 || _        Y nw xY wt          |t          |          |          S |dk    r|st                      S |dk    r|st          | |          S |dk    rt          | ||          S |dv rt          | ||dk    |          S |d	k    rr|spg d
}|j        t          k    r|                    g d           t#          t%          t'          ddg          t)          |d |D                       g                    S |dk    r|st+                      S |t,          v rf|s|j        t0          z  rt2                              |          }nn|j        t4          z  rt6                              |          }nD|j        t          z  rt8                              |          }nt:                              |          }|r|S |j        t4          z  rt<                              |          }nD|j        t          z  rt>                              |          }nt@                              |          }|r|S tB                              |          }|rtE          t          |                    S t          d|z  | j        | j                  |tF          v rtI          | |||          S t          |t          |          |          S )zParses an escape sequence.Fbad escape (end of pattern)gGr   NpPrq   r   )
            )   i(   i)   r  r  c                 ,    g | ]}t          |          S rD   r   r   r   s     r>   r   z parse_escape.<locals>.<listcomp>  s6     D D D ENaLL D D Dr?   r%   bad escape \%s)%rV  r   r'   r   r3   HEX_ESCAPESparse_hex_escapeparse_group_refr   r   SearchAnchorparse_string_setparse_named_charparse_propertyr   r   r   r|  r   Stringr   Graphemer&  r   r$   WORD_POSITION_ESCAPESr   ASCII_POSITION_ESCAPESUNICODE_POSITION_ESCAPESPOSITION_ESCAPESASCII_CHARSET_ESCAPESUNICODE_CHARSET_ESCAPESCHARSET_ESCAPESCHARACTER_ESCAPESr   r*  parse_numeric_escape)r   r   r   saved_ignorer   r   charsetr_   s           r>   r   r     s   &LF	B&F N16=&*MMM	[b+b/62NNN	s6J		#"64000 	# 	# 	#"FJJJ	# dCGGV444	s6~~	s6---	sf555	tfdB#Iv>>>	s6***'))NN111222ffdD\22HT D DD D D 5 5        	 	s6zz	u  	zD  1-11"55e# 1.22266g% 1044R88(,,R00 : 	,)--b11EEZ'! 	,+//33EE#''++E 	L!%%b)) 	)SZZ(((%*FM6:FFF	v#FD"f=== dCGGV444s   ?B B#"B#c                 .   |s|dk    rt          | ||g|          S |}| j        }|                                 }|t          v r||z  }| j        }|                                 }t	          |          rY|t
          v rP|j        t          z  }|t          k    s|t          k    rd}nd}t          ||z   d          |z  }t          ||          S || _        |                    |          rt          d| j        | j                  t          ||| j                  S )z!Parses a numeric escape sequence.rK       rQ   rl  )parse_octal_escaper3   r   r*  r  r  r   r   r   r   r  r   rn  r'   r   r   )	r   r   r   r   r3  r   encoding
octal_maskr_   s	            r>   r  r  /  s#    >s!&$f=== F
I	B	V||"J	ZZ\\F 		/j 0 0zN2H5  H$6$6!

"
Q''*4E!$... FJ&!! P3V]FJOOO$
333r?   c                 d   | j         }|                                 }t          |          dk     rU|t          v rL|                    |           | j         }|                                 }t          |          dk     r	|t          v L|| _         	 t          d                    |          d          }t          |||          S # t          $ re |d         t          v r1t          dd                    |          z  | j
        | j                   t          d|d         z  | j
        | j                   w xY w)z Parses an octal escape sequence.   rg   rQ   r   zincomplete escape \%sr  )r3   r   r^   r  r[   r  r]   r   r2  r'   r   )r   r   r3  r   r   r   r_   s          r>   r  r  P  s)   
I	B
f++//bJ..bJ	ZZ\\ f++//bJ..
 FJ	BGGFOOQ''dE6222   !9
""02776??BmVZ) ) ) )F1I5v}j  s   3C   A/D/c                    | j         }g }t          |          D ]b}|                                 }	|	t          vr.t	          d|d                    |          | j        |          |                    |	           c	 t          d                    |          d          }
|
dk     rt          ||
|          S n# t          $ r Y nw xY wt	          d|d                    |          | j        |          )zParses a hex escape sequence.incomplete escape \rg   rR   i   zbad hex escape \)r3   ranger   r  r'   r]   r   r[   r  r   r2  )r   r   escexpected_lenr   typer   r3  rp   r   r_   s              r>   r  r  e  s   
IF<    ZZ\\Z%ddBGGFOOOLmY( ( (b7BGGFOOR(( 8!$v666      %33@mY     s   =#B8 8
CCc                    |                      d           | j        }t          | d          }|                      d           |                    |          rt	          d| j        | j                  t          |||          S )zParses a group reference.r7  TrH  rl  )rU  r3   rS  rn  r'   r   r   )r   r   r   r   s       r>   r  r  |  s|    
MM#
Ifd##D
MM#$ P3V]FJOOO$i000r?   c                     |                      d           t          | d          }|                      d           |	||j        vrt          d| j        | j                  t          ||          S )zParses a string set reference.r7  TrH  Nzundefined named list)rU  rS  kwargsr'   r   r3   r   )r   r   r   s      r>   r  r    sm    
MM#fd##D
MM#|t4;..*FM6:FFF4&&&r?   c                    | j         }|                     d          r|                     t          d          }|                     d          r\	 t	          j        |          }t          |t          |          |          S # t          $ r t          d| j
        | j                   w xY w|| _         t          |t          d          |          S )zParses a named character.r  T)keep_spacesr  undefined character namer  )r3   r   rC  NAMED_CHAR_PARTunicodedatalookupr   r   r   r'   r   )r   r   r   r   r   r_   s         r>   r  r    s    
I||C TBB<< 	#*400%dCJJ???   6*   FJ$C&111s   1B &B'c                 |   | j         }|                                 }|dk    r|                     d          }t          |           \  }}|                     d          rY|j        t
          z  rt          }	n|j        t          z  rt          }	nd}	t          ||||k    | |	          }
t          ||
|          S n[|rY|dv rU|j        t
          z  rt          }	n|j        t          z  rt          }	nd}	t          d||| |	          }
t          ||
|          S || _         |rdnd	}t          |t          |          |          S )
zParses a Unicode property.r  r   r  r   r  CLMNPSZNrq   r   )r3   r   r   parse_property_namer   r   ASCII_ENCODINGr   UNICODE_ENCODINGlookup_propertyr   r   r   )r   r   r   r   r   r   negate	prop_namer   r  r   s              r>   r  r    s]   
I	B	Syyc""-f55	4<< 	5zE! )g% +"9dH4F! ! !D tV444	5 
 
1i: 	%HHZ'! 	'HHHtR6HMMMT4000 FJ	!cB$B000r?   c                 ,   |                      t                    }| j        }|                                 }|rQ|dv rM|}|                      t          t          d          z                                            }|r| j        }nd|}}nd}|| _        ||fS )z/Parses a property name, which may be qualified.z:=z &_-./N)rC  PROPERTY_NAME_PARTr3   r   ALNUMr   strip)r   r   r   r   r  s        r>   r  r    s    .//D
I	B	 bDjj	H 566<<>> 	.
II #ItII	FJd?r?   c                    |j         t          z  pt          }| j        }d| _        |                     d          }	 |t
          k    rt          | |          }nt          | |          }|                     d          st          d| j	        | j
                  	 || _        n# || _        w xY w|r|                    |j                   }|                    t          |                    }|S )zParses a character set.Fr   ]	missing ]r   r   )r   _ALL_VERSIONSDEFAULT_VERSIONrV  r   r    parse_set_imp_unionparse_set_unionr'   r   r3   r   r   r   )r   r   versionr  r  r   s         r>   r   r     s    zM)=oG&LF\\#F	+h&vt44DD"6400D||C   	@V]FJ???	@ +l**** ;DM(9::??od&;&;?<<DKs   AB   	B)c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          ||          S )zParses a set union ([x||y]).rh   r.   r   )parse_set_symm_diffr   r[   r^   r   r   r   itemss      r>   r  r    s     ../E
,,t

 8(66777 ,,t

 8 5zzQQxD%   r?   c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          ||          S )z+Parses a set symmetric difference ([x~~y]).ri   r.   r   )parse_set_interr   r[   r^   
SetSymDiffr  s      r>   r   r     s    VT**+E
,,t

 4_VT22333 ,,t

 4 5zzQQxdE"""r?   c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          ||          S )z#Parses a set intersection ([x&&y]).rj   r.   r   )parse_set_diffr   r[   r^   SetInterr  s      r>   r  r  	  s    FD))*E
,,t

 3^FD11222 ,,t

 3 5zzQQxD%   r?   c                    t          | |          g}|                     d          r8|                    t          | |                     |                     d          8t          |          dk    r|d         S t	          ||          S )z!Parses a set difference ([x--y]).rk   r.   r   )r  r   r[   r^   SetDiffr  s      r>   r  r    s     ../E
,,t

 8(66777 ,,t

 8 5zzQQx4r?   c                     |j         t          z  pt          }t           |          g}	  j        }                     d          r| _        nW|t          k    r(t           fdt          D                       r| _        n$|	                    t           |                     {t          |          dk    r|d         S t          ||          S )z#Parses a set implicit union ([xy]).Tr  c              3   B   K   | ]}                     |          V  d S r   r8  )r   opr   s     r>   r  z&parse_set_imp_union.<locals>.<genexpr>)  s/      &J&JBv||B'7'7&J&J&J&J&J&Jr?   r.   r   )r   r  r  parse_set_memberr3   r   r"   anySET_OPSr[   r^   r   )r   r   r  r  r   s   `    r>   r  r    s    zM)=oGfd++,E5J	<< 	"FJh3&J&J&J&J'&J&J&J#J#J"FJ%fd334445 5zzQQxD%   r?   c           	         t          | |          }| j        }t          |t                    r|j        r|                     d          s|S |j        t          z  pt          }| j        }|t          k    r|                     d          r	|| _        |S |                     d          r3|| _        t          ||t          t          d                    g          S t          | |          }t          |t                    r|j        s-t          ||t          t          d                    |g          S |j        |j        k    rt          d| j        | j                  |j        |j        k    r|S t          |j        |j                  S )z#Parses a member in a character set.rN  r  zbad character range)parse_set_itemr3   r/   r   r   r   r   r  r  r"   r   r   r_   r'   r   Range)r   r   start
saved_pos1r  
saved_pos2ends          r>   r  r  4  sw    64((EJui((  ll3 zM)=oG J(v||C00  
||C <  
uiC&9&9:;;; 
&
&Cc9%% AS\ AuiC&9&93?@@@ {SY)6=&*EEE{cici(((r?   c                    |j         t          z  pt          }|                     d          rt	          | |d          S | j        }|                     d          r(	 t          | |          S # t          $ r
 || _        Y nw xY w|t          k    r|                     d          ru|                     d          }t          | |          }|                     d          st          d| j        | j                  |r|                    |j                   }|S |                                 }|st          d	| j        | j                  t          t!          |                    S )
z"Parses an item in a character set.r   Tz[:r   r   r  r  r  zunterminated character set)r   r  r  r   r   r3   parse_posix_classrJ   r"   r  r'   r   r   r   r   r   r   )r   r   r  r   r  r   r   s          r>   r  r  ]  s`   zM)=oG||D 0FD$///
I||D #	#$VT222 	# 	# 	#"FJJJ	# (v||C00 c""vt,,||C   	@V]FJ??? 	???,=?>>D	B M0&-LLLSWWs   A* *A>=A>c                     |                      d          }t          |           \  }}|                      d          st                      t          ||| | d          S )zParses a POSIX character class.r   z:]T)posix)r   r  rJ   r  )r   r   r  r  r   s        r>   r  r    s]    \\#F)&11OIt<< ll9dJdKKKKr?   c                     t          |           }| |z
  }t          |          dk     r|dfS t          d|z            \  }}||z  |z   |fS )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    sZ    3xxH(NE
5zzF{ u--HCc>C$$r?   c                    | dd         dk    r| d         | dd         } }nd}|                      d          }t          |          dk    r<t          t          |d                   t          |d                   z            \  }}nGt          |          dk    r&t          t          |d                             \  }}nt	                      d                    |||          }|                    d	          r
|dd
         S |S )z<Converts a numeric string to a rational string, if possible.Nr.   rN  r   rg   /rO   z{}{}/{}z/1)splitr^   r  floatr2  r8   endswith)numericsignpartsr"  r!  results         r>   numeric_to_rationalr-    s    !}
GACCMgMM#E
5zzQ$U58__uU1X%FGGSS	Uq$U58__55SSlldC--Ft tt}Mr?   c                     	 t          d                    |                     S # t          t          f$ r4 d                    d | D                                                       cY S w xY w)z&Standardises a property or value name.rg   c              3   "   K   | ]
}|d v|V  dS )z_- NrD   r  s     r>   r  z#standardise_name.<locals>.<genexpr>  s&      <<bBeOOrOOOO<<r?   )r-  r]   r2  ZeroDivisionErrorupper)r   s    r>   standardise_namer2    sx    E"2774==111)* E E Eww<<D<<<<<BBDDDDDEs   !$ AA)(A)zALNUM DIGIT PUNCT XDIGITzYES Y NO N TRUE T FALSE Fc                 f   | rt          |           nd} t          |          }| |fdk    rdd| }}} |r"| s |                                t          v rd|z   }| rt                              |           }|s,|st          d          t          d|j        |j                  |\  }}|                    |          }	|	,|st          d          t          d|j        |j                  t          |dz  |	z  ||	          S d
D ]P} t                              |           \  }}|                    |          }	|	t          |dz  |	z  ||	          c S Qt                              |          }|rK|\  }}t          |          t          k    rt          |dz  dz  ||	          S t          |dz  | |	          S |                    d          rEt                              |dd                   }|r!|\  }}d|v rt          |dz  dz  ||	          S dD ]p\  }
} |                    |
          rVt                              |           \  }}|                    |dd                   }	|	t          |dz  |	z  ||	          c S q|st          d          t          d|j        |j                  )zLooks up a property.N)GENERALCATEGORYASSIGNEDr4  
UNASSIGNEDr   zunknown propertyzunknown property valuerR   r  )GCSCRIPTBLOCKr.   ISrO   YES))r:  r8  )INr9  )r2  r1  _POSIX_CLASSES
PROPERTIESr   r'   r   r3   Propertyr   _BINARY_VALUES
startswith)propertyr_   r   r   r  r  r   prop_id
value_dictval_idprefixs              r>   r  r    s1    .6?)))4HU##E%;;;$5|\%  X  %++-->"A"A% O~~h'' 	G 0.///*FM6:FFF"&&> 645550&-LLLB&0(XNNNN . S S(nnX66&&W]f4hRRRRRR  >>%  D H"z??n,,W]a/HMMMM28|hGGGG  R~~eACCk** 	R"&GZ
""B! 3XQQQQ @ W WF## 	W",..":":GZ^^E!##K00F!B& 8(XVVVVVV  (&'''
"FM6:
>
>>r?   c                    |                                  }|t          v rt                               |          }|rdt          |          gfS |t          v r'|dk    s|rdt          | t          |         |          gfS |dk    rdt          | |          gfS |dk    r|rt          |           }|d|gfS t          d|z  | j	        | j
                  t          | j        t                    rd}nd	}|d
k    ro|}t          |          dk     rD| j
        }|                                  }|t          vr|| _
        n||z  }t          |          dk     Ddt!          |d          |z  gfS |t"          v r|}| j
        }|                                  }|t"          v rM||z  }| j
        }|                                  }|r+t%          ||z             rdt!          ||z   d          |z  gfS || _
        dt!          |          gfS |dk    rdt          d          gfS |st          d| j	        | j
                  dt          d          t          |          gfS )z0Compiles a replacement template escape sequence.Frv   r  Tr  Nr  r  r  rK  r  rQ   r   r  )r   r&  r  r   r  parse_repl_hex_escapecompile_repl_groupparse_repl_named_charr'   r   r3   r/   sepbytesr^   r  r  r*  r  )r   r2   
is_unicoder   r_   r  r3  r   s           r>   _compile_replacementrN    s   	B	U{{!%%b)) 	'3u::,&&"))z)0R"MMNNN99,VW==>>>999)&11E ug~%%*FM6:FFF&*e$$ 


	Syy&kkAoo
IB##&
bLF &kkAoo s61~~
2333	V|| J	ZZ\\<<bLF
IB Ahv{++ As6B;22Z?@@@ 
c&kk]""	Tzzs4yyk!! N16=&*MMM 3t99c"gg&&&r?   c                 :   g }t          |          D ]g}|                                 }|t          vr3t          d|d                    |          | j        | j                  |                    |           ht          d                    |          d          S )z5Parses a hex escape sequence in a replacement string.r  rg   rR   )	r  r   r  r'   r]   r   r3   r[   r  )r   r  r  r3  rp   r   s         r>   rH  rH  E  s    F<    ZZ\\Z%ddBGGFOOOLmVZ) ) )brwwv###r?   c                 d   | j         }|                     d          r|                     t          t	          d          z            }|                     d          rM	 t          j        |          }t          |          S # t          $ r t          d| j
        | j                   w xY w|| _         dS )z1Parses a named character in a replacement string.r   r  r  N)r3   r   rC  r&  r   r  r  r   r   r'   r   )r   r   r   r_   s       r>   rJ  rJ  Q  s    
I||C 	C 011<< 	#*4005zz!   6*   FJ4s   "B   &B&c                 v   |                      d           t          | dd          }|                      d           |                                r@t          |          }d|cxk    r|j        k    sn t          d| j        | j                  |S 	 |j        |         S # t          $ r t          d          w xY w)z0Compiles a replacement template group reference.r7  TrH  r   invalid group referenceunknown group)rU  rS  r  r  groupsr'   r   r3   
groupindexr   
IndexError)r   r2   r   indexs       r>   rI  rI  b  s    
MM#fdD))D
MM#||~~ D		E++++W^++++16=&*MMM*!$'' * * *)))*s   B B8z  rR   z	NON-MATCHMATCHFTz SIMPLE_IGNORE_CASEz FULL_IGNORE_CASEc                 V    t          |           dk    r| d         S t          |           S Nr.   r   )r^   r   r  s    r>   make_sequencer^    s&    
5zzQQxE??r?   c                   x    e Zd Zd ZddZd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd ZddZd Zd Zd Zd Zd ZdS )	RegexBasec                     | j         | _        d S r   )rZ   _keyr;   s    r>   r:   zRegexBase.__init__  s    N			r?   Nc                    || j         }nt          |          }|| j        }nt          |t          z           }|| j        }nt          |          }|| j         k    r|| j        k    r|| j        k    r| S |                     |||          S r   )r   r   r   CASE_FLAGS_COMBINATIONSr   r   rebuildr;   r   r   r   s       r>   r   zRegexBase.with_flags  s    }HHH~~HJJ0j1HIJIIYI%%**G*G
t~
%
%K||Hj)<<<r?   c                     d S r   rD   r;   r2   r   fuzzys       r>   
fix_groupszRegexBase.fix_groups  s    r?   c                     | S r   rD   r;   r   r   s      r>   r   zRegexBase.optimise      r?   c                     | S r   rD   r;   r   s     r>   pack_characterszRegexBase.pack_characters  rn  r?   c                     | S r   rD   rc  s    r>   remove_captureszRegexBase.remove_captures  rn  r?   c                     dS NTrD   rc  s    r>   	is_atomiczRegexBase.is_atomic      tr?   c                     dS ru  rD   rc  s    r>   can_be_affixzRegexBase.can_be_affix  rw  r?   c                     dS NFrD   rc  s    r>   contains_groupzRegexBase.contains_group      ur?   c                     t                      r   )rL   r;   r   s     r>   get_firstsetzRegexBase.get_firstset  s    r?   c                     dS r{  rD   rc  s    r>   has_simple_startzRegexBase.has_simple_start  r}  r?   Fc                 .    |                      ||          S r   )_compiler;   r   rj  s      r>   r   zRegexBase.compile  s    }}We,,,r?   c                     dS r{  rD   rc  s    r>   r  zRegexBase.is_empty  r}  r?   c                 *    t          | j                  S r   )hashrb  rc  s    r>   __hash__zRegexBase.__hash__  s    DIr?   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  rb  r;   others     r>   __eq__zRegexBase.__eq__  s'    DzzT%[[(DTY%*-DDr?   c                 .    |                      |           S r   )r  r  s     r>   __ne__zRegexBase.__ne__  s    ;;u%%%%r?   c                 .    |                                  d fS r   	max_widthr  s     r>   get_required_stringzRegexBase.get_required_string      ~~%%r?   )NNNFF)r@   rA   rB   r:   r   rk  r   rq  rs  rv  ry  r|  r  r  r   r  r  r  r  r  rD   r?   r>   r`  r`    s        # # #= = = =(                  - - - -    E E E& & && & & & &r?   r`  c                   .    e Zd Zd	dZd Zd Zd Zd ZdS )
ZeroWidthBaseTr   c                     t                               |            t          |          | _        || _        | j        | j        f| _        d S r   )r`  r:   r   r   r  rZ   rb  )r;   r   r  s      r>   r:   zZeroWidthBase.__init__  s>    4   X NDM1			r?   c                 "    t          d g          S r   r   r  s     r>   r  zZeroWidthBase.get_firstset      D6{{r?   c                     d}| j         r
|t          z  }|r
|t          z  }|r
|t          z  }|| j        t
          z  z  }| j        |fgS Nr   )r   POSITIVE_OPFUZZY_OP
REVERSE_OPr  ENCODING_OP_SHIFT_opcoder;   r   rj  r   s       r>   r  zZeroWidthBase._compile  sa    = 	![ E 	XE 	 ZE"333u%&&r?   c           	          t          d                    t          |z  | j        t          | j                 ddg| j                                      d S )N	{}{} {}{}rg    ASCII)printr8   INDENT_op_namePOS_TEXTr   r  r;   indentr   s      r>   dumpzZeroWidthBase.dump  sX    k  &$-
4=
!B>$-#@B B 	C 	C 	C 	C 	Cr?   c                     dS r  rD   rc  s    r>   r  zZeroWidthBase.max_width      qr?   N)Tr   )r@   rA   rB   r:   r  r  r  r  rD   r?   r>   r  r    sg        2 2 2 2  	' 	' 	'C C C    r?   r  c                   H    e Zd Zej        ej        dZdZd Zd Z	d Z
d ZdS )r   rZ  ANYc                     dS ru  rD   rc  s    r>   r  zAny.has_simple_start  rw  r?   c                 >    d}|r
|t           z  }| j        |         |fgS r  )r  r  r  s       r>   r  zAny._compile  s.     	XEg&.//r?   c                 f    t          d                    t          |z  | j                             d S )N{}{})r  r8   r  r  r  s      r>   r  zAny.dump  s*    fmmFVOT];;<<<<<r?   c                     dS Nr.   rD   rc  s    r>   r  zAny.max_width  r  r?   N)r@   rA   rB   OPr  ANY_REVr  r  r  r  r  r  rD   r?   r>   r   r     sf        fBJ//GH  0 0 0= = =    r?   r   c                   6    e Zd Zej        ej        dZdZd ZdS )r   rZ  ANY_ALLc                 V    d| _         d| _        d| _        | j        | j         f| _        d S )NTFr   )r   r   r   rZ   rb  rc  s    r>   r:   zAnyAll.__init__  s+    NDM1			r?   N)	r@   rA   rB   r  r  ANY_ALL_REVr  r  r:   rD   r?   r>   r   r     s9        j77GH2 2 2 2 2r?   r   c                   0    e Zd Zej        ej        dZdZdS )r   rZ  ANY_UN)r@   rA   rB   r  r  	ANY_U_REVr  r  rD   r?   r>   r   r   
  s$        hbl33GHHHr?   r   c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )r|  c                 H    t                               |            || _        d S r   )r`  r:   r
  )r;   r
  s     r>   r:   zAtomic.__init__  s!    4   $r?   c                 >    | j                             |||           d S r   r
  rk  ri  s       r>   rk  zAtomic.fix_groups  "    ""7GU;;;;;r?   c                     | j                             ||          | _         | j                                         r| j         S | S r   )r
  r   r  rm  s      r>   r   zAtomic.optimise  s>    /224AA?##%% 	#?"r?   c                 D    | j                             |          | _         | S r   r
  rq  rp  s     r>   rq  zAtomic.pack_characters      /99$??r?   c                 B    | j                                         | _         | S r   r
  rs  rc  s    r>   rs  zAtomic.remove_captures!      /99;;r?   c                 4    | j                                         S r   r
  ry  rc  s    r>   ry  zAtomic.can_be_affix%      ++---r?   c                 4    | j                                         S r   r
  r|  rc  s    r>   r|  zAtomic.contains_group(      --///r?   c                 6    | j                             |          S r   r
  r  r  s     r>   r  zAtomic.get_firstset+      ++G444r?   c                 4    | j                                         S r   r
  r  rc  s    r>   r  zAtomic.has_simple_start.      //111r?   c                 t    t           j        fg| j                            ||          z   t           j        fgz   S r   )r  ATOMICr
  r   ENDr  s      r>   r  zAtomic._compile1  s5    )$/"9"9'5"I"IIF:, 	r?   c                     t          d                    t          |z                       | j                            |dz   |           d S )N{}ATOMICr.   )r  r8   r  r
  r  r  s      r>   r  zAtomic.dump5  sD    j00111VaZ11111r?   c                 4    | j                                         S r   r
  r  rc  s    r>   r  zAtomic.is_empty9      '')))r?   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  r
  r  s     r>   r  zAtomic.__eq__<  s/    T

d5kk) do

/ 	r?   c                 4    | j                                         S r   r
  r  rc  s    r>   r  zAtomic.max_width@      ((***r?   c                 6    | j                             |          S r   r
  r  r  s     r>   r  zAtomic.get_required_stringC      227;;;r?   N)r@   rA   rB   r:   rk  r   rq  rs  ry  r|  r  r  r  r  r  r  r  r  rD   r?   r>   r|  r|    s        % % %< < <      . . .0 0 05 5 52 2 2  2 2 2* * *  + + +< < < < <r?   r|  c                        e Zd Zej        ZdZdS )BoundaryBOUNDARYN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  F  s        kGHHHr?   r  c                   p   e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zed             Zd Zd Zd ZdS )r   c                 H    t                               |            || _        d S r   )r`  r:   r   )r;   r   s     r>   r:   zBranch.__init__K  s!    4    r?   c                 H    | j         D ]}|                    |||           d S r   )r   rk  )r;   r2   r   rj  rm   s        r>   rk  zBranch.fix_groupsO  s6     	2 	2ALL'51111	2 	2r?   c                 :   | j         st          g           S t                              ||| j                   }|r!t                              ||          \  }}g }n t                              ||          \  }}g }t                              |||          }t          |          dk    r\t          |          g}|r|sG|                     |||          }|r.|r|	                    |           n|
                    d|           n|}t          ||z   |z             S r\  )r   r   r   _flatten_branches_split_common_suffix_split_common_prefix_reduce_to_setr^   _add_precheckr[   insertr^  )r;   r   r   r   suffixrF  r   firstsets           r>   r   zBranch.optimiseS  s4   } 	 B<< ++D'4=II  	%::4JJFHFF%::4JJFHF ((wAAx==1x(()H 5 5--dGXFF 5 5 1111 8444HVh.7888r?   c                    t                      }|rdnd}|D ]K}t          |          t          u r1|j        t          k    r!|                    |j        |                    I d S |sd S t          ||d |D                       S )Nr   c                 ,    g | ]}t          |          S rD   r  r  s     r>   r   z(Branch._add_precheck.<locals>.<listcomp>  s    .M.M.My||.M.M.Mr?   )r   r  Literalr   r   r   
charactersr   )r;   r   r   r   r  r3   branchs          r>   r  zBranch._add_precheckv  s    %%"bb 	 	FF||w&&6+<+F+FF-c23333 	4tW.M.MW.M.M.MNNNr?   c                 8    fd| j         D             | _         | S )Nc                 :    g | ]}|                               S rD   )rq  )r   rm   r   s     r>   r   z*Branch.pack_characters.<locals>.<listcomp>  s'    HHHQ**400HHHr?   r   rp  s    `r>   rq  zBranch.pack_characters  s%    HHHH$-HHHr?   c                 2    d | j         D             | _         | S )Nc                 6    g | ]}|                                 S rD   rs  r   rm   s     r>   r   z*Branch.remove_captures.<locals>.<listcomp>  s$    DDD**,,DDDr?   r  rc  s    r>   rs  zBranch.remove_captures  s    DDdmDDDr?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   rv  r  s     r>   r  z#Branch.is_atomic.<locals>.<genexpr>  *      88Q1;;==888888r?   r  r   rc  s    r>   rv  zBranch.is_atomic  !    88$-888888r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   )ry  r  s     r>   r  z&Branch.can_be_affix.<locals>.<genexpr>  s,      ;;1>>##;;;;;;r?   r  rc  s    r>   ry  zBranch.can_be_affix  s!    ;;T];;;;;;r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r|  r  s     r>   r  z(Branch.contains_group.<locals>.<genexpr>  s.      ==!1##%%======r?   )r  r   rc  s    r>   r|  zBranch.contains_group  s!    ==t}======r?   c                     t                      }| j        D ]}||                    |          z  }|pt          d g          S r   )r   r   r  )r;   r   r   rm   s       r>   r  zBranch.get_firstset  sG    UU 	* 	*A!..)))BB S$[[ r?   c                     | j         sg S t          j        fg}| j         D ]K}|                    |                    ||                     |                    t          j        f           Lt          j        f|d<   |S Nr  )r   r  BRANCHr   r   r[   NEXTr  )r;   r   rj  r   rm   s        r>   r  zBranch._compile  sx    } 	I 	% 	%AKK		'511222KK$$$$F:Rr?   c                 L   t          d                    t          |z                       | j        d                             |dz   |           | j        dd          D ]E}t          d                    t          |z                       |                    |dz   |           Fd S )Nz{}BRANCHr   r.   {}OR)r  r8   r  r   r  )r;   r  r   rm   s       r>   r  zBranch.dump  s    j00111afqj'222qss$ 	( 	(A&--00111FF6A:w''''	( 	(r?   c                     g }|D ]]}|                     | |          }t          |t                    r|                    |j                   H|                    |           ^|S r   )r   r/   r   r   r   r[   )r   r   r   new_branchesrm   s        r>   r  zBranch._flatten_branches  ss      	' 	'A

4))A!V$$ '##AJ////##A&&&&r?   c                 (  	
 g }|D ]H}t          |t                    r|                    |j                   2|                    |g           It	          d |D                       }|d         
d	|}	|k     rw
	                                         r]t          	
fd|D                       rA	dz  		|k     r6
	                                         rt          	
fd|D                       A	| j        t          z  rI	dk    rAt          fd|D                       s&dz  dk    rt          fd|D                       &dk    rg |fS g }|D ],}|                    t          |d                               -
d          |fS )Nc              3   4   K   | ]}t          |          V  d S r   r^   r   rl   s     r>   r  z.Branch._split_common_prefix.<locals>.<genexpr>  (      551A555555r?   r   c              3   <   K   | ]}|                  k    V  d S r   rD   )r   rl   r3   rF  s     r>   r  z.Branch._split_common_prefix.<locals>.<genexpr>  R       C- C- DES6
+D C- C- C- C- C- C-r?   r.   c              3   N   K   | ]}t                               |          V   d S r   )r   
_can_splitr   rl   r4   s     r>   r  z.Branch._split_common_prefix.<locals>.<genexpr>  sC       ( ((9(9!U(C(C ( ( ( ( ( (r?   
r/   r   r[   r  minry  r  r   r   r^  )r   r   alternativesrm   r  end_posr  rl   r4   r3   rF  s           @@@r>   r  zBranch._split_common_prefix  se     	) 	)A!X&& )##AG,,,,##QC(((( 5555555	 aGmms 8 8 : :ms C- C- C- C- C-+C- C- C- @- @-m1HC Gmms 8 8 : :ms C- C- C- C- C-+C- C- C- @- @-m : 	 E!))C ( ( ( (( ( ( % %)
 !))C ( ( ( (( ( ( % %)
 A::x<  	< 	<Aak : :;;;;ww--r?   c                 4  	
 g }|D ]H}t          |t                    r|                    |j                   2|                    |g           It	          d |D                       }|d         
d	d|z
  }	|k    rw
	                                         r]t          	
fd|D                       rA	dz  		|k    r6
	                                         rt          	
fd|D                       Ad	z
  | j        t          z  rGdk    rAt          fd|D                       s&dz  dk    rt          fd|D                       &dk    rg |fS g }|D ]-}|                    t          |d                                .
 d          |fS )Nc              3   4   K   | ]}t          |          V  d S r   r  r  s     r>   r  z.Branch._split_common_suffix.<locals>.<genexpr>  r  r?   r   r  c              3   <   K   | ]}|                  k    V  d S r   rD   )r   rl   r3   r  s     r>   r  z.Branch._split_common_suffix.<locals>.<genexpr>  r  r?   r.   c              3   N   K   | ]}t                               |          V   d S r   )r   _can_split_revr!  s     r>   r  z.Branch._split_common_suffix.<locals>.<genexpr>	  sC       ( (A(=(=a(G(G ( ( ( ( ( (r?   r"  )r   r   r$  rm   r  r%  r  rl   r4   r3   r  s           @@@r>   r  zBranch._split_common_suffix  sl     	) 	)A!X&& )##AG,,,,##QC(((( 5555555	 ay.Gmms 8 8 : :ms C- C- C- C- C-+C- C- C- @- @-m1HC Gmms 8 8 : :ms C- C- C- C- C-+C- C- C- @- @-m S: 	 !))C ( ( ( (( ( ( % %)
 !))C ( ( ( (( ( ( % %)
 A::x<  	= 	=AaE6l ; ;<<<<ufhh ,..r?   c                    t                               | |dz
            sdS t                               | |          sdS t                               | |dz
  |dz                      rdS t                               | |dz             r*t                               | |dz
  |dz                      rdS t                               | |dz
            r*t                               | |dz
  |dz                      rdS dS )Nr.   TFrO   )r   _is_full_case
_is_folded)r  r4   s     r>   r   zBranch._can_split	  s    ##E51955 	4##E511 	4 U519uqy#89:: 	5   	22 	


E%!)eai"78
9
9	5   	22 	


E%!)eai"78
9
9	5tr?   c                 N   t          |           }t                              | ||z
            sdS t                              | ||z
  dz
            sdS t                              | ||z
  dz
  ||z
  dz                      rdS t                              | ||z
  dz             r0t                              | ||z
  dz
  ||z
  dz                      rdS t                              | ||z
  dz
            r0t                              | ||z
  dz
  ||z
  dz                      rdS dS )NTr.   FrO   )r^   r   r,  r-  )r  r4   r  s      r>   r*  zBranch._can_split_rev*	  s?   %jj ##E3;77 	4##E3;?;; 	4 U3;?S5[1_#DEFF 	5   ea88 	


E#+/C%K!O"CD
E
E	5   ea88 	


E#+/C%K!O"CD
E
E	5tr?   c                    t          t                    }i }g }|D ]@}t                              |          rJ||j                                     |g           |                    |j        t          |                     gt          |t                    r|j
        rt                              |j
        d                   re||j
        d         j                                     |j
                   |                    |j
        d         j        t          |                     t                              | ||||           |                    |           Bt                              | |||           |S r  )r   r   r   _is_simple_characterr_   r[   
setdefaultr^   r/   r   r  _flush_char_prefix)r   r   r   prefixedorderr  rm   s          r>   _merge_common_prefixeszBranch._merge_common_prefixesE	  s_   
 t$$ 	' 	'A**1-- '!((!---  #e**5555Q)) 	'ag 	'))!'!*55	' )*11!':::  !13u::>>>>))$5      ##A&&&&!!$%FFFr?   c                 J    t          | t                    o| j        o| j         S r   )r/   r   r   r   r   s    r>   r0  zBranch._is_simple_charactera	  s#    !Y''KAJKq|;KKr?   c                    g }t                      }t          }|D ]}t          |t          t          t
          f          r_|j        |k    r%t                              | ||||           |j        }|	                    |
                    t                               t                              | ||||           |                    |           t                              | ||||           |S )Nr   )r   r   r/   r   r?  SetBaser   r   _flush_set_membersr   r   r[   )r   r   r   r  r  r   rm   s          r>   r  zBranch._reduce_to_sete	  s    
 	' 	'A!i7;<< '<:----dGUJ"$ $ $ "#J		!,,&,99::::))$
      ##A&&&&!!$

	 	 	 r?   c           	         |sd S t          |                                fd          D ]\  }}t          |          dk    r)|                    t	          |d                              Bg }d}|D ]e}	t          |	          dk    r+|                    t	          |	dd                               @|s#|                    t                                 d}ft          t          |          t          |          g          }
|                    |
                    | |                     |	                                 	                                 d S )Nc                      | d                  S r  rD   )pairr4  s    r>   <lambda>z+Branch._flush_char_prefix.<locals>.<lambda>	  s    
Q. r?   keyr.   r   FT)
sortedr  r^   r[   r^  r   r   r   r   r   )r   r   r3  r4  r  r_   r   subbranchesoptionalrm   r   s      `       r>   r2  zBranch._flush_char_prefix	  si     	F%hnn&6&6 = = = =       	F 	FOE88}}!!##M(1+$>$>????  ! ( (A1vvzz#**=133+A+ABBBB% (#**8::666#'#Yu%5%5vk7J7J$KLL##H$5$5dG$D$DEEEEr?   c                 <   |sd S t          |          dk    rt          |          d         }n1t          | t          |                                        | |          }|                    |                    |                     |                                 d S )Nr.   r   r   )r^   r   r   r   r[   r   r   )r   r   r  r   r  r   s         r>   r:  zBranch._flush_set_members	  s      	Fu::??;;q>DDD$u++..77gFFDDOOzOBBCCCr?   c                     d|cxk    rt          |           k     sn dS | |         }t          |t                    o|j        o|j        t
          z  t
          k    S )Nr   F)r^   r/   r   r   r   FULLIGNORECASE)r  rp   r   s      r>   r,  zBranch._is_full_case	  se    A""""E

""""5Qx4++ ? ??^+
>	@r?   c                 j   t          |           dk     rdS | D ](}t          |t                    r|j        r|j        s dS )d                    d | D                       }t          j        t          |          }t          j	                    }|D ]#}|t          j        t          |          k    r dS $dS )NrO   Frg   c              3   >   K   | ]}t          |j                  V  d S r   )chrr_   r   rp   s     r>   r  z$Branch._is_folded.<locals>.<genexpr>	  s*      55!QW555555r?   T)
r^   r/   r   r   r   r]   r   r   FULL_CASE_FOLDINGget_expand_on_folding)r  rp   foldedexpanding_charsr   s        r>   r-  zBranch._is_folded	  s    u::>>5 	 	Aq),, AJ luu 55u55555!"3V<< !688  	 	A)*;Q????tt @ ur?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r>   r  z"Branch.is_empty.<locals>.<genexpr>	  s*      77A1::<<777777r?   r  rc  s    r>   r  zBranch.is_empty	  s!    77777777r?   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  r   r  s     r>   r  zBranch.__eq__	  s'    DzzT%[[(LT]en-LLr?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r>   r  z#Branch.max_width.<locals>.<genexpr>	  r  r?   )r<  r   rc  s    r>   r  zBranch.max_width	  r	  r?   N)r@   rA   rB   r:   rk  r   r  rq  rs  rv  ry  r|  r  r  r  staticmethodr  r  r  r   r*  r5  r0  r  r2  r:  r,  r-  r  r  r  rD   r?   r>   r   r   J  sH       ! ! !2 2 2!9 !9 !9FO O O    9 9 9< < <> > >! ! !  ( ( ( 
 
 \
 '. '. \'.R &/ &/ \&/P   \0   \4   \6 L L \L   \6   \2   \ @ @ \@   \*8 8 8M M M9 9 9 9 9r?   r   c                   >    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	S )
r  c                     t                               |            || _        || _        || _        | j        | j        f| _        d S r   )r`  r:   r   rf  r   rZ   rb  )r;   r   rf  r   s       r>   r:   zCallGroup.__init__	  s?    4   	
 NDJ.			r?   c                 *   	 t          | j                  | _        nR# t          $ rE 	 | j        j        | j                 | _        n$# t
          $ r t          d|| j                  w xY wY nw xY wd| j        cxk    r| j        j        k    sn t          d|| j                  | j        dk    r1| j        j	        | j                 dk    rt          d|| j                  | j        j
                            | ||f           | j        | j        f| _        d S )NrS  r   rT  r.   zambiguous group reference)r  rf  r2  r   group_indexr   r'   r   r~  open_group_countgroup_callsr[   rZ   rb  ri  s       r>   rk  zCallGroup.fix_groups	  s4   	OTZDJJ 	O 	O 	OO!Y24:>

 O O O5wNNNO 
	O DJ7777$)"77777$-@@@:>>di8DqHH3WdmLLL	$$dGU%;<<<NDJ.			&    
A+AA+!A%%A+*A+c                 8    t          d| j        | j                  Nzgroup reference not allowedr'   r2   r   rc  s    r>   rs  zCallGroup.remove_captures	      14<OOOr?   c                 *    t           j        | j        fgS r   )r  
GROUP_CALLcall_refr  s      r>   r  zCallGroup._compile	  s    .//r?   c                 f    t          d                    t          |z  | j                             d S )Nz{}GROUP_CALL {})r  r8   r  rf  r  s      r>   r  zCallGroup.dump	  s-    &&v
CCDDDDDr?   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  rf  r  s     r>   r  zCallGroup.__eq__	  '    DzzT%[[(FTZ5;-FFr?   c                     t           S r   r  rc  s    r>   r  zCallGroup.max_width	      r?   c                     d | _         d S r   r   rc  s    r>   __del__zCallGroup.__del__	      			r?   N)r@   rA   rB   r:   rk  rs  r  r  r  r  rk  rD   r?   r>   r  r  	  s        / / // / /&P P P0 0 0E E EG G G      r?   r  c                       e Zd Zd Zd ZdS )CallRefc                 "    || _         || _        d S r   )refparsed)r;   rp  rq  s      r>   r:   zCallRef.__init__
  s    r?   c                     t           j        | j        fg| j                            ||          z   t           j        fgz   S r   )r  CALL_REFrp  rq  r  r  r  s      r>   r  zCallRef._compile
  sB    +tx()DK,@,@
- - VJ<  	!r?   Nr@   rA   rB   r:   r  rD   r?   r>   rn  rn   
  s2          ! ! ! ! !r?   rn  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdedfdZd ZddZd Zd Zd Zd	 Zd
 Zd Zd ZdS )r   FTc                    t                               |            || _        t          |          | _        t
          |         | _        t          |          | _        | j        rJ| j        t          z  t          k    r2t          j
        t          t          | j                            | _        nt          | j                  | _        | j        | j        | j        | j        | j        f| _        d S r   )r`  r:   r_   r   r   re  r   r   rF  r   r   rK  rI  rM  rZ   rb  )r;   r_   r   r   r   s        r>   r:   zCharacter.__init__
  s    4   
X1*=iM 	*t?
  *+<c$*ooNNDKKdj//DK^TZ
/4>+			r?   c                 0    t          | j        |||          S r   )r   r_   rg  s       r>   rf  zCharacter.rebuild!
  s    Xz9EEEr?   c                     | S r   rD   r;   r   r   r   s       r>   r   zCharacter.optimise$
  rn  r?   c                 "    t          | g          S r   r  r  s     r>   r  zCharacter.get_firstset'
  r  r?   c                     dS ru  rD   rc  s    r>   r  zCharacter.has_simple_start*
  rw  r?   c                 x   d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }t          | j        | j        |f         || j        g          }t          | j
                  dk    r4t          |t          d | j
        D             | j                  g          }|                    ||          S )Nr   r.   c                 ,    g | ]}t          |          S rD   r   r  s     r>   r   z&Character._compile.<locals>.<listcomp>;
  s    (E(E(EAQ(E(E(Er?   r   )r   r  r   ZEROWIDTH_OPr  PrecompiledCoder  r   r_   r^   rM  r   r  r   )r;   r   rj  r   r   s        r>   r  zCharacter._compile-
  s    = 	![ E> 	"\!E 	XET_g-E F
*    t{a4(E(E(E(E(E"* "* "* + , ,D ||GU+++r?   c           	         t          t          | j                                                d          }t	          d                    t          |z  t          | j                 |t          | j
                                      d S )Nbuz{}CHARACTER {} {}{})asciirI  r_   lstripr  r8   r  r  r   	CASE_TEXTr   r;   r  r   displays       r>   r  zCharacter.dump@
  sv    DJ((//55#**6F?
4=
!7Ido,FH H 	I 	I 	I 	I 	Ir?   c                 *    || j         k    | j        k    S r   )r_   r   r;   r   s     r>   matcheszCharacter.matchesE
  s    dj T]22r?   c                 *    t          | j                  S r   )r^   rM  rc  s    r>   r  zCharacter.max_widthH
  s    4;r?   c                 b    | j         sdS t          d | j        D                       | _        d| fS )Nr  c              3   4   K   | ]}t          |          V  d S r   r~  r  s     r>   r  z0Character.get_required_string.<locals>.<genexpr>O
  s(      &C&C!s1vv&C&C&C&C&C&Cr?   r   )r   r|   rM  folded_charactersr  s     r>   r  zCharacter.get_required_stringK
  s;    } 	7!&&C&Ct{&C&C&C!C!C$wr?   NF)r@   rA   rB   r   r  	CHARACTERr   CHARACTER_IGNr   rF  CHARACTER_REVCHARACTER_IGN_REVr  r:   rf  r   r  r  r  r  r  r  r  rD   r?   r>   r   r   	
  s3       z5.A5)2<.:0@:
C!Hd#3R5Etb2	4G (,+ + + +"F F F       , , ,&I I I
3 3 3         r?   r   c                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )rv  c                     t                               |            || _        || _        || _        || _        || _        d S r   )r`  r:   r   rf  yes_itemno_itemr   )r;   r   rf  r  r  r   s         r>   r:   zConditional.__init__T
  s=    4   	
  r?   c                    	 t          | j                  | _        ng# t          $ rZ 	 | j        j        | j                 | _        n9# t
          $ r, | j        dk    rd| _        nt          d|| j                  Y nw xY wY nw xY wd| j        cxk    r| j        j        k    sn t          d|| j                  | j	        
                    |||           | j        
                    |||           d S )NDEFINEr   rT  rS  )r  rf  r2  r   rY  r   r'   r   r~  r  rk  r  ri  s       r>   rk  zConditional.fix_groups\
  s   	ITZDJJ 		I 		I 		II!Y24:>

 I I I:)) "#DJJ$-HHH J	I		I DJ7777$)"7777717DMJJJ  '5999%88888s2    
B AB 3A:7B 9A::B ?B c                     | j                             ||          }| j                            ||          }t          || j        ||| j                  S r   )r  r   r  rv  rf  r   )r;   r   r   r  r  s        r>   r   zConditional.optimisep
  sJ    =))$88,''g664XwNNNr?   c                     | j                             |          | _         | j                            |          | _        | S r   )r  rq  r  rp  s     r>   rq  zConditional.pack_charactersv
  s5    55d;;|33D99r?   c                 ~    | j                                         | _         | j                                        | _        d S r   )r  rs  r  rc  s    r>   rs  zConditional.remove_captures{
  s0    5577|3355r?   c                 f    | j                                         o| j                                        S r   )r  rv  r  rc  s    r>   rv  zConditional.is_atomic
  s)    }&&((ET\-C-C-E-EEr?   c                 f    | j                                         o| j                                        S r   )r  ry  r  rc  s    r>   ry  zConditional.can_be_affix
  s)    }))++K0I0I0K0KKr?   c                 f    | j                                         p| j                                        S r   )r  r|  r  rc  s    r>   r|  zConditional.contains_group
  s)    }++--N1L1L1N1NNr?   c                 l    | j                             |          | j                            |          z  S r   )r  r  r  r  s     r>   r  zConditional.get_firstset
  s2    **733
,
#
#G
,
,- 	.r?   c                 n   t           j        | j        fg}|                    | j                            ||                     | j                            ||          }|r5|                    t           j        f           |                    |           |                    t           j	        f           |S r   )
r  GROUP_EXISTSrf  r   r  r   r  r[   r  r  r;   r   rj  r   add_codes        r>   r  zConditional._compile
  s    $*-.DM))'599:::<''77 	"KK$$$KK!!!RVJr?   c                 h   t          d                    t          |z  | j                             | j                            |dz   |           | j                                        sJt          d                    t          |z                       | j                            |dz   |           d S d S )Nz{}GROUP_EXISTS {}r.   r  )r  r8   r  rf  r  r  r  r  r  s      r>   r  zConditional.dump
  s    !((&$*EEFFF6A:w///|$$&& 	3&--00111Lfqj'22222	3 	3r?   c                 f    | j                                         o| j                                        S r   )r  r  r  rc  s    r>   r  zConditional.is_empty
  s)    }%%''CDL,A,A,C,CCr?   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  rf  r  r  r  s     r>   r  zConditional.__eq__
  sJ    DzzT%[[( Hdj$-
,.!KG.H 	Hr?   c                 ~    t          | j                                        | j                                                  S r   r<  r  r  r  rc  s    r>   r  zConditional.max_width
  .    4=**,,dl.D.D.F.FGGGr?   c                     d | _         d S r   rj  rc  s    r>   rk  zConditional.__del__
  rl  r?   N)r@   rA   rB   r:   rk  r   rq  rs  rv  ry  r|  r  r  r  r  r  r  rk  rD   r?   r>   rv  rv  S
  s
       ! ! !9 9 9(O O O  
6 6 6F F FL L LO O O. . .
 
 
3 3 3D D DH H HH H H    r?   rv  c                        e Zd Zej        ZdZdS )DefaultBoundaryDEFAULT_BOUNDARYN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  s        !G!HHHr?   r  c                        e Zd Zej        ZdZdS )DefaultEndOfWordDEFAULT_END_OF_WORDN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  s        $G$HHHr?   r  c                        e Zd Zej        ZdZdS )DefaultStartOfWordDEFAULT_START_OF_WORDN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  s        &G&HHHr?   r  c                        e Zd Zej        ZdZdS )r   END_OF_LINEN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
          nGHHHr?   r   c                        e Zd Zej        ZdZdS )r   END_OF_LINE_UN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
          GHHHr?   r   c                        e Zd Zej        ZdZdS )EndOfStringEND_OF_STRINGN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  r  r?   r  c                        e Zd Zej        ZdZdS )r   END_OF_STRING_LINEN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
  s        #G#HHHr?   r   c                        e Zd Zej        ZdZdS )r   END_OF_STRING_LINE_UN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r   
  s        %G%HHHr?   r   c                        e Zd Zej        ZdZdS )	EndOfWordEND_OF_WORDN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r  
  r  r?   r  c                       e Zd ZdZd ZdS )FailureFAILUREc                     t           j        fgS r   )r  r  r  s      r>   r  zFailure._compile
  s    r?   Nr@   rA   rB   r  r  rD   r?   r>   r  r  
  s(        H         r?   r  c                   X    e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd ZdS )r	  Nc                    t                               |            |i }|| _        || _        d|v r%dD ]"}||d         v r|                    |d           #t          |          t          d          z  rdD ]}|                    |d           ndD ]}|                    |d           |                    dd           d|v r#dD ]}|d                             |d           d S ddd|d         d         d|d<   d S )	Nr;  r?  r  )r   r   rn   r   r.   )drp   rs   r<  )r`  r:   r
  r   r1  r   )r;   r
  r   rn   s       r>   r:   zFuzzy.__init__
  sp   4   K$& [   9 9F+++**1i888 {c%jj( 	5 2 2&&q&11112  5 5&&q)4444 	sI... [   5 5F#..q!44445 5 )*#q!## ##Kr?   c                 >    | j                             ||d           d S ru  r  ri  s       r>   rk  zFuzzy.fix_groups
  s"    ""7GT:::::r?   c                 D    | j                             |          | _         | S r   r  rp  s     r>   rq  zFuzzy.pack_characters
  r  r?   c                 B    | j                                         | _         | S r   r  rc  s    r>   rs  zFuzzy.remove_captures  r  r?   c                 4    | j                                         S r   r
  rv  rc  s    r>   rv  zFuzzy.is_atomic  r  r?   c                 4    | j                                         S r   r  rc  s    r>   r|  zFuzzy.contains_group  r  r?   c                 4   g }dD ]T}| j         |         }|                    |d                    |                    |d         t          n|d                    UdD ](}|                    | j         d         |                    )| j         d         d         }|                    |t          n|           d}|r
|t          z  }| j                             d          }|rpt
          j        |ft          |          z   g|                    |d          z   t
          j	        fgz   | j
                            |d          z   t
          j        fgz   S t
          j        |ft          |          z   g| j
                            |d          z   t
          j        fgz   S )	Ndiser   r.   r?  r;  r<  r  T)r   r[   r  r  r   r  	FUZZY_EXTr|   r   r  r
  r  FUZZY)r;   r   rj  	argumentsrn   vr   r  s           r>   r  zFuzzy._compile  s   	 	B 	BA #AQqT"""!A$,YYAaDAAAA  	: 	:AT-f5a89999 V$U+aiQ777 	 ZE##F++ 	DlE*U9-=-==>ll7D))*.0gZL9o%%gt4459;	{C D (E"U9%5%556
/
!
!'4
0
0157VI;? 	@r?   c                     |                                  }|rd|z   }t          d                    t          |z  |                     | j                            |dz   |           d S )NrQ  z	{}FUZZY{}r.   )_constraints_to_stringr  r8   r  r
  r  )r;   r  r   r   s       r>   r  z
Fuzzy.dump)  si    1133 	,+Kk  &+>>???VaZ11111r?   c                 4    | j                                         S r   r  rc  s    r>   r  zFuzzy.is_empty0  r  r?   c                 ~    t          |           t          |          u o| j        |j        k    o| j        |j        k    S r   )r  r
  r   r  s     r>   r  zFuzzy.__eq__3  sE    T

d5kk) Edo

/ E#/53DD	Fr?   c                     t           S r   r  rc  s    r>   r  zFuzzy.max_width7  rh  r?   c                 N   g }dD ]j}| j         |         \  }}|dk    rd}|dk    rd                    |          }||z  }||d                    |          z  }|                    |           kg }dD ]D}| j         d         |         }|dk    r)|                    d                    ||                     E| j         d         d         }|D|dk    r>d	                    d
                    |          |          }|                    |           d                    |          S )Nidsr   rg   z{}<=z<={}r;  r  r<  z{}<={}r   r  )r   r8   r[   r]   )	r;   r   r   r#  r<  conr;  r@  limits	            r>   r  zFuzzy._constraints_to_string:  s@    	$ 	$D'-HCaxxCQwwmmC((4KCv}}S)))s#### 	8 	8D$V,T2EqyyFMM%66777 (/??388D>>599Dt$$$xx$$$r?   r   )r@   rA   rB   r:   rk  rq  rs  rv  r|  r  r  r  r  r  r  rD   r?   r>   r	  r	  
  s        !# !# !# !#F; ; ;    + + +0 0 0@ @ @<2 2 2* * *F F F  % % % % %r?   r	  c                        e Zd Zd Zd Zd ZdS )r  c           	          t          t          t          t                      dd           t	                      g                    }|                    ||          S r  )r|  r   r  r   GraphemeBoundaryr   )r;   r   rj  grapheme_matchers       r>   r  zGrapheme._compile\  sX     "(JvxxD,I,I


, # #      ''777r?   c                 Z    t          d                    t          |z                       d S )Nz
{}GRAPHEME)r  r8   r  r  s      r>   r  zGrapheme.dumpd  s(    l!!&6/2233333r?   c                     t           S r   r  rc  s    r>   r  zGrapheme.max_widthg  rh  r?   N)r@   rA   rB   r  r  r  rD   r?   r>   r  r  [  sA        8 8 84 4 4    r?   r  c                       e Zd Zd ZdS )r  c                      t           j        dfgS r  )r  GRAPHEME_BOUNDARYr  s      r>   r   zGraphemeBoundary.compilek  s    %q)**r?   N)r@   rA   rB   r   rD   r?   r>   r  r  j  s#        + + + + +r?   r  c                   z    e Zd Zej        ZdZd Zd Zd Z	d Z
d Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )r   GREEDY_REPEATc                 d    t                               |            || _        || _        || _        d S r   )r`  r:   r
  r  r  )r;   r
  r  r  s       r>   r:   zGreedyRepeat.__init__r  s/    4   $""r?   c                 >    | j                             |||           d S r   r  ri  s       r>   rk  zGreedyRepeat.fix_groupsx  r  r?   c                     | j                             ||          } t          |           || j        | j                  S r   )r
  r   r  r  r  r;   r   r   r
  s       r>   r   zGreedyRepeat.optimise{  s7    _--dG<<
tDzz*dndnEEEr?   c                 D    | j                             |          | _         | S r   r  rp  s     r>   rq  zGreedyRepeat.pack_characters  r  r?   c                 B    | j                                         | _         | S r   r  rc  s    r>   rs  zGreedyRepeat.remove_captures  r  r?   c                 T    | j         | j        k    o| j                                        S r   )r  r  r
  rv  rc  s    r>   rv  zGreedyRepeat.is_atomic  s$    ~/ODO4M4M4O4OOr?   c                     dS r{  rD   rc  s    r>   ry  zGreedyRepeat.can_be_affix  r}  r?   c                 4    | j                                         S r   r  rc  s    r>   r|  zGreedyRepeat.contains_group  r  r?   c                 z    | j                             |          }| j        dk    r|                    d            |S r  )r
  r  r  r   )r;   r   r   s      r>   r  zGreedyRepeat.get_firstset  s8    _))'22>QFF4LLL	r?   c                    | j         | j        g}| j        |                    t                     n|                    | j                   | j                            ||          }|sg S t          |          g|z   t          j	        fgz   S r   )
r  r  r  r[   r  r
  r   r|   r  r  )r;   r   rj  repeatr
  s        r>   r  zGreedyRepeat._compile  s    ,/>!MM)$$$$MM$.)))_,,We<<
 	Iv*,
|;<r?   c                     | j         d}n| j         }t          d                    t          |z  | j        | j        |                     | j                            |dz   |           d S )NINF
{}{} {} {}r.   )r  r  r8   r  r  r  r
  r  r;   r  r   r  s       r>   r  zGreedyRepeat.dump  sq    >!EENEl!!&6/4=
.%! ! 	" 	" 	" 	VaZ11111r?   c                 4    | j                                         S r   r  rc  s    r>   r  zGreedyRepeat.is_empty  r  r?   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  r
  r  r  r  s     r>   r  zGreedyRepeat.__eq__  sK    DzzT%[[( dot~
..#.
/. 	r?   c                 `    | j         t          S | j                                        | j         z  S r   )r  r  r
  r  rc  s    r>   r  zGreedyRepeat.max_width  s+    >!((**T^;;r?   c                 T   | j         t          n| j         }| j        dk    r3| j                                        |z  }t          |t                    d fS | j                            |          \  }}|r||fS | j                                        |z  }t          |t                    d fS r  )r  r  r  r
  r  r#  r  )r;   r   r  ru   ofsreqs         r>   r  z GreedyRepeat.get_required_string  s    !%!7IIT^	>Q))++i7Aq)$$d**?66w??S 	8OO%%'')31i  $&&r?   N)r@   rA   rB   r  r  r  r  r:   rk  r   rq  rs  rv  ry  r|  r  r  r  r  r  r  r  rD   r?   r>   r   r   n  s       GH# # #< < <F F F
    P P P  0 0 0  = = =2 2 2* * *  
< < <' ' ' ' 'r?   r   c                        e Zd Zd Zd Zd ZdS )r  c                     dS ru  rD   rc  s    r>   rv  zPossessiveRepeat.is_atomic  rw  r?   c                 H   | j                             ||          }|sg S | j        | j        g}| j        |                    t                     n|                    | j                   t          j        ft          |          g|z   t          j
        ft          j
        fgz   S r   )r
  r   r  r  r  r[   r  r  r  r|   r  )r;   r   rj  r
  r  s        r>   r  zPossessiveRepeat._compile  s    _,,We<<
 	I,/>!MM)$$$$MM$.))))f.;z6*?  	r?   c                 ,   t          d                    t          |z                       | j        d}n| j        }t          d                    t          |dz   z  | j        | j        |                     | j                            |dz   |           d S )Nr  r  r  r.   rO   )r  r8   r  r  r  r  r
  r  r  s       r>   r  zPossessiveRepeat.dump  s    j00111>!EENEl!!&FQJ"7
.%! ! 	" 	" 	" 	VaZ11111r?   N)r@   rA   rB   rv  r  r  rD   r?   r>   r  r    sA            
2 
2 
2 
2 
2r?   r  c                   n    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd ZdS )r  c                 r    t                               |            || _        || _        || _        d | _        d S r   )r`  r:   r   rf  r
  rc  )r;   r   rf  r
  s       r>   r:   zGroup.__init__  s6    4   	
$r?   c                 l    | ||f| j         j        | j        <   | j                            |||           d S r   )r   defined_groupsrf  r
  rk  ri  s       r>   rk  zGroup.fix_groups  s:    04gu/E	 ,""7GU;;;;;r?   c                 n    | j                             ||          }t          | j        | j        |          S r   )r
  r   r  r   rf  r  s       r>   r   zGroup.optimise  s/    _--dG<<
TY
J777r?   c                 D    | j                             |          | _         | S r   r  rp  s     r>   rq  zGroup.pack_characters  r  r?   c                 4    | j                                         S r   r  rc  s    r>   rs  zGroup.remove_captures      ..000r?   c                 4    | j                                         S r   r  rc  s    r>   rv  zGroup.is_atomic  r  r?   c                     dS r{  rD   rc  s    r>   ry  zGroup.can_be_affix  r}  r?   c                     dS ru  rD   rc  s    r>   r|  zGroup.contains_group  rw  r?   c                 6    | j                             |          S r   r  r  s     r>   r  zGroup.get_firstset
  r  r?   c                 4    | j                                         S r   r  rc  s    r>   r  zGroup.has_simple_start  r  r?   c                    g }| j         x}}|dk     r!| j        j        |         }| j        j        |z
  }| j         ||f}| j        j                            |          }||t          j        |fgz  }|t          j        t          |           ||fgz  }|| j
                            ||          z  }|t          j        fgz  }||t          j        fgz  }|S r  )rf  r   private_groupsr~  	call_refsr   r  rs  GROUPr  r
  r   r  )r;   r   rj  r   public_groupprivate_groupr@  rp  s           r>   r  zGroup._compile  s    '+z1}193MBL I1MAMj'5(i!%%c**?bk3'((D"(CG,,m\JKK''777"&?bfZL Dr?   c                     | j         }|dk     r| j        j        |         }t          d                    t
          |z  |                     | j                            |dz   |           d S )Nr   z
{}GROUP {}r.   )rf  r   r  r  r8   r  r
  r  )r;   r  r   rf  s       r>   r  z
Group.dump&  se    
199I,U3El!!&6/599:::VaZ11111r?   c                 z    t          |           t          |          u o| j        | j        f|j        |j        fk    S r   )r  rf  r
  r  s     r>   r  zGroup.__eq__-  s=    T

d5kk) *tz4?.K;(
)/* 	+r?   c                 4    | j                                         S r   r  rc  s    r>   r  zGroup.max_width1  r  r?   c                 6    | j                             |          S r   r  r  s     r>   r  zGroup.get_required_string4  r  r?   c                     d | _         d S r   rj  rc  s    r>   rk  zGroup.__del__7  rl  r?   N)r@   rA   rB   r:   rk  r   rq  rs  rv  ry  r|  r  r  r  r  r  r  r  rk  rD   r?   r>   r  r    s         < < <8 8 8
  1 1 1+ + +    5 5 52 2 2  ,2 2 2+ + ++ + +< < <    r?   r  c                        e Zd Zej        ZdZdS )KeepKEEPN)r@   rA   rB   r  r!  r  r  rD   r?   r>   r   r   :  s        gGHHHr?   r   c                        e Zd Zej        ZdZdS )r  LAZY_REPEATN)r@   rA   rB   r  r#  r  r  rD   r?   r>   r  r  >  r  r?   r  c                   l    e Zd ZdddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd ZdS )rq  AHEADBEHINDrZ  c                     t                               |            t          |          | _        t          |          | _        || _        d S r   )r`  r:   r   rr  r   r
  )r;   rr  r   r
  s       r>   r:   zLookAround.__init__E  s;    4   6llX$r?   c                 H    | j                             || j        |           d S r   )r
  rk  rr  ri  s       r>   rk  zLookAround.fix_groupsK  s$    ""7DK?????r?   c                     | j                             || j                  }| j        r|                                r|S t          | j        | j        |          S r   )r
  r   rr  r   r  rq  r  s       r>   r   zLookAround.optimiseN  sT    _--dDK@@
= 	Z0022 	$+t}jAAAr?   c                 D    | j                             |          | _         | S r   r  rp  s     r>   rq  zLookAround.pack_charactersU  r  r?   c                 4    | j                                         S r   r  rc  s    r>   rs  zLookAround.remove_capturesY  r  r?   c                 4    | j                                         S r   r  rc  s    r>   rv  zLookAround.is_atomic\  r  r?   c                 4    | j                                         S r   r  rc  s    r>   ry  zLookAround.can_be_affix_  r  r?   c                 4    | j                                         S r   r  rc  s    r>   r|  zLookAround.contains_groupb  r  r?   c                 z    | j         r%| j        |k    r| j                            |          S t	          d g          S r   )r   rr  r
  r  r   r  s     r>   r  zLookAround.get_firstsete  s<    = 	9T[G33?//888D6{{r?   c                     d}| j         r
|t          z  }|r
|t          z  }|r
|t          z  }t          j        |t          | j                   fg| j        	                    | j                  z   t          j
        fgz   S r  )r   r  r  r  r  
LOOKAROUNDr  rr  r
  r   r  r  s       r>   r  zLookAround._compilek  s    = 	![ E 	XE 	 ZE-O(<(<=>
/
!
!$+
.
./356*> 	?r?   c                     t          d                    t          |z  | j        | j                 t
          | j                                      | j                            |dz   | j                   d S )Nz{}LOOK{} {}r.   )	r  r8   r  	_dir_textrr  r  r   r
  r  r  s      r>   r  zLookAround.dumpw  sj    m""6F?
.
%x'>@ @ 	A 	A 	AVaZ55555r?   c                 B    | j         o| j                                        S r   )r   r
  r  rc  s    r>   r  zLookAround.is_empty|  s    };!9!9!;!;;r?   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  rr  r   r
  r  s     r>   r  zLookAround.__eq__  sK    DzzT%[[( Odk4=
/.$|U^U=MN.O 	Or?   c                     dS r  rD   rc  s    r>   r  zLookAround.max_width  r  r?   N)r@   rA   rB   r3  r:   rk  r   rq  rs  rv  ry  r|  r  r  r  r  r  r  rD   r?   r>   rq  rq  B  s        x00I% % %@ @ @B B B  1 1 1+ + +. . .0 0 0  
? 
? 
?6 6 6
< < <O O O    r?   rq  c                   l    e Zd ZdddZd Zd Zd Zd Zd Zd	 Z	d
 Z
d Zd Zd Zd Zd Zd Zd ZdS )rz  r%  r&  rZ  c                     t                               |            t          |          | _        t          |          | _        || _        || _        || _        d S r   )r`  r:   r   rr  r   r
  r  r  )r;   rr  r   r
  r  r  s         r>   r:   zLookAroundConditional.__init__  sI    4   6llX$ r?   c                     | j                             |||           | j                            |||           | j                            |||           d S r   )r
  rk  r  r  ri  s       r>   rk  z LookAroundConditional.fix_groups  sV    ""7GU;;;  '5999%88888r?   c                     | j                             || j                  }| j                            || j                  }| j                            || j                  }t          | j        | j        |||          S r   )r
  r   rr  r  r  rz  r   )r;   r   r   r
  r  r  s         r>   r   zLookAroundConditional.optimise  sn    _--dDK@@
=))$<<,''dk::$T[$-
G  	r?   c                     | j                             |          | _         | j                            |          | _        | j                            |          | _        | S r   )r
  rq  r  r  rp  s     r>   rq  z%LookAroundConditional.pack_characters  sL    /99$??55d;;|33D99r?   c                     | j                                         | _         | j                                        | _        | j                                        | _        d S r   )r
  rs  r  r  rc  s    r>   rs  z%LookAroundConditional.remove_captures  sE    /99;;5577|3355r?   c                     | j                                         o1| j                                        o| j                                        S r   )r
  rv  r  r  rc  s    r>   rv  zLookAroundConditional.is_atomic  sC    ))++ #0G0G0I0I #
,
 
 
"
"	$r?   c                     | j                                         o1| j                                        o| j                                        S r   )r
  ry  r  r  rc  s    r>   ry  z"LookAroundConditional.can_be_affix  sC    ,,.. *4=3M3M3O3O *l''))	+r?   c                     | j                                         p1| j                                        p| j                                        S r   )r
  r|  r  r  rc  s    r>   r|  z$LookAroundConditional.contains_group  sG    ..00 J
-
&
&
(
(J,0L,G,G,I,I	Kr?   c                 V   t           j        t          | j                  t          | j                   fg}|                    | j                            | j        |                     |                    t           j	        f           |                    | j
                            ||                     | j                            ||          }|r5|                    t           j	        f           |                    |           |                    t           j        f           |S r   )r  CONDITIONALr  r   rr  r   r
  r   r[   r  r  r  r  r  s        r>   r  zLookAroundConditional._compile  s    T]!3!3ST[5I5IJKDO++DK??@@@RWK   DM))'599:::<''77 	"KK$$$KK!!!RVJr?   c                 :   t          d                    t          |z  | j        | j                 t
          | j                                      | j                            |dz   | j                   t          d                    t          |z                       | j	                            |dz   |           | j
                                        sJt          d                    t          |z                       | j
                            |dz   |           d S d S )Nz{}CONDITIONAL {} {}r.   z{}EITHERr  )r  r8   r  r3  rr  r  r   r
  r  r  r  r  r  s      r>   r  zLookAroundConditional.dump  s   #**6F?
.
%x'>@ @ 	A 	A 	AVaZ555j001116A:w///|$$&& 	3&--00111Lfqj'22222	3 	3r?   c                     | j                                         r| j                                        p| j                                        S r   )r
  r  r  r  rc  s    r>   r  zLookAroundConditional.is_empty  sA    ((**Gt}/E/E/G/G "
,


!
!	#r?   c                     t          |           t          |          u o)| j        | j        | j        f|j        |j        |j        fk    S r   )r  r
  r  r  r  s     r>   r  zLookAroundConditional.__eq__  sK    DzzT%[[( Mdot}
,.!,enemL.M 	Mr?   c                 ~    t          | j                                        | j                                                  S r   r  rc  s    r>   r  zLookAroundConditional.max_width  r  r?   c                 .    |                                  d fS r   r  r  s     r>   r  z)LookAroundConditional.get_required_string  r  r?   N)r@   rA   rB   r3  r:   rk  r   rq  rs  rv  ry  r|  r  r  r  r  r  r  rD   r?   r>   rz  rz    s        x00I  9 9 9
    6 6 6
$ $ $+ + +K K K  3 3 3# # #M M MH H H& & & & &r?   rz  c                       e Zd Zd Zd ZdS )r  c                     || _         d S r   )r   )r;   r   s     r>   r:   zPrecompiledCode.__init__  rl  r?   c                 ,    t          | j                  gS r   )r|   r   r  s      r>   r  zPrecompiledCode._compile  s    di  !!r?   Nrt  rD   r?   r>   r  r    s2          " " " " "r?   r  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdeddfdZd ZddZd Zd Zd	 Zd
 Zd Zd ZdS )r?  FTr   c                    t                               |            || _        t          |          | _        t
          |         | _        t          |          | _        || _        | j	        | j        | j        | j        | j        f| _
        d S r   )r`  r:   r_   r   r   re  r   r   r  rZ   rb  )r;   r_   r   r   r   r  s         r>   r:   zProperty.__init__  sm    4   
X1*=i ^TZ
/4>+			r?   c                 <    t          | j        |||| j                  S r   )r?  r_   r  rg  s       r>   rf  zProperty.rebuild  s#    
Hj)
-  	r?   c                     | S r   rD   ry  s       r>   r   zProperty.optimise  rn  r?   c                 "    t          | g          S r   r  r  s     r>   r  zProperty.get_firstset  r  r?   c                     dS ru  rD   rc  s    r>   r  zProperty.has_simple_start  rw  r?   c                     d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }|| j        t          z  z  }| j        | j        |f         || j	        fgS r  )
r   r  r   r  r  r  r  r  r   r_   r  s       r>   r  zProperty._compile  ss    = 	![ E> 	"\!E 	XE"333dow67
KLLr?   c                 $   t           | j        dz	           }|d         |d         | j        dz           }}t          d                    t          |z  t
          | j                 ||t          | j                 ddg| j	                                      d S )NrR   r   r.   i  z{}PROPERTY {} {}:{}{}{}rg   r  )
PROPERTY_NAMESr_   r  r8   r  r  r   r  r   r  )r;   r  r   r   r   r_   s         r>   r  zProperty.dump  s    djB./1gtAwtzF':;e'..v
4=
!4	$/0Jx.
') ) 	* 	* 	* 	* 	*r?   c                 H    t          j        | j        |          | j        k    S r   )r   has_property_valuer_   r   r  s     r>   r  zProperty.matches  s    (R88DMIIr?   c                     dS r  rD   rc  s    r>   r  zProperty.max_width  r  r?   Nr  )r@   rA   rB   r   r  PROPERTYr   PROPERTY_IGNr   rF  PROPERTY_REVPROPERTY_IGN_REVr  r:   rf  r   r  r  r  r  r  r  rD   r?   r>   r?  r?    s       j%-@o%("+7No~rT8JHd+R_~
? 	"G (,
+ 
+ 
+ 
+         	M 	M 	M* * *J J J    r?   r?  c                       e Zd ZdZd ZdS )PrunePRUNEc                     t           j        fgS r   )r  r\  r  s      r>   r  zPrune._compile  s    ~r?   Nr  rD   r?   r>   r[  r[    s(        H    r?   r[  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdZdedfdZd ZddZd Zd Zd	 Zd
 ZdS )r  FTRANGEc                     t                               |            || _        || _        t	          |          | _        t          |         | _        t	          |          | _        | j	        | j        | j        | j        | j        | j        f| _
        d S r   )r`  r:   lowerr1  r   r   re  r   r   rZ   rb  )r;   ra  r1  r   r   r   s         r>   r:   zRange.__init__'  sq    4   

X1*=i^TZT]
/4>+			r?   c                 <    t          | j        | j        |||          S r   )r  ra  r1  rg  s       r>   rf  zRange.rebuild3  s    TZXz9MMMr?   c                 <   | j         r| j        t          z  r|r| S |j        t          z  r| j        t
          z  t
          k    r| S t          j                    }g }|D ]v}| j        t          |          cxk    r| j
        k    rPn )t          j        t          |          }|                    t          d |D             | j                             w|s| S t          |          | j
        | j        z
  dz   k     r|                    d|            t#          |          S )Nc                 ,    g | ]}t          |          S rD   r~  r  s     r>   r   z"Range.optimise.<locals>.<listcomp>H  s    $<$<$<SVV$<$<$<r?   r   r.   r   )r   r   r   r   r   rF  r   rL  ra  r   r1  r   rK  r[   r  r^   r  r   )r;   r   r   r   rN  r  r   rM  s           r>   r   zRange.optimise6  sC   } 	T_z%A 	f 	K g% 	4?^+K
+ +K !688 ! 	/ 	/BzSWW2222
22222)*;R@@V$<$<V$<$<$<!_. . . / / /  	Ku::
TZ/!333LLD!!!e}}r?   c                     d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }| j        | j        |f         || j        | j        fgS r  )	r   r  r   r  r  r  r   ra  r1  r  s       r>   r  zRange._compileU  sl    = 	![ E> 	"\!E 	XEdow67

*  	r?   c           
      r   t          t          | j                                                d          }t          t          | j                                                d          }t          d                    t          |z  t          | j	                 ||t          | j                                      d S )Nr  z{}RANGE {} {} {}{})r  rI  ra  r  r1  r  r8   r  r  r   r  r   )r;   r  r   display_lowerdisplay_uppers        r>   r  z
Range.dump`  s    c$*oo..55d;;c$*oo..55d;;"))&6/
4=
!=-
DO
$& & 	' 	' 	' 	' 	'r?   c                 H    | j         |cxk    o
| j        k    nc | j        k    S r   )ra  r1  r   r  s     r>   r  zRange.matchesg  s/    
b....DJ....4=@@r?   c                     dS r  rD   rc  s    r>   r  zRange.max_widthj  r  r?   Nr  )r@   rA   rB   r   r  r_  r   	RANGE_IGNr   rF  	RANGE_REVRANGE_IGN_REVr  r  r:   rf  r   r  r  r  r  rD   r?   r>   r  r     s        :u*=r|NE#:BLtnblZ$68H~t&<b>NPG H.2v
+ 
+ 
+ 
+N N N   >	 	 	' ' 'A A A    r?   r  c                       e Zd Zedfej        edfej        edfej        e	dfej
        edfej        edfej        edfej        e	dfej        iZefdZd Zd Zd Zd Zd Zd	 Zd
S )r   FTc                     t                               |            || _        || _        || _        t
          |         | _        | j        | j        | j        f| _        d S r   )	r`  r:   r   rf  r   re  r   rZ   rb  )r;   r   rf  r   r   s        r>   r:   zRefGroup.__init__t  sO    4   	
 1*=NDJ?			r?   c                 z   	 t          | j                  | _        nR# t          $ rE 	 | j        j        | j                 | _        n$# t
          $ r t          d|| j                  w xY wY nw xY wd| j        cxk    r| j        j        k    sn t          d|| j                  | j	        | j        | j
        f| _        d S )NrT  r.   rS  )r  rf  r2  r   rY  r   r'   r   r~  rZ   r   rb  ri  s       r>   rk  zRefGroup.fix_groups}  s    	ETZDJJ 	E 	E 	EE!Y24:>

 E E EOWdmDDDE 
	E DJ7777$)"7777717DMJJJNDJ?			r\  c                 8    t          d| j        | j                  r^  r_  rc  s    r>   rs  zRefGroup.remove_captures  r`  r?   c                 X    d}|r
|t           z  }| j        | j        |f         || j        fgS r  )r  r  r   rf  r  s       r>   r  zRefGroup._compile  s9     	XEdow67
KLLr?   c                     t          d                    t          |z  | j        t          | j                                      d S )Nz{}REF_GROUP {}{})r  r8   r  rf  r  r   r  s      r>   r  zRefGroup.dump  sE     ''
DO
$& & 	' 	' 	' 	' 	'r?   c                     t           S r   r  rc  s    r>   r  zRefGroup.max_width  rh  r?   c                     d | _         d S r   rj  rc  s    r>   rk  zRefGroup.__del__  rl  r?   N)r@   rA   rB   r   r  	REF_GROUPr   REF_GROUP_IGNr   rF  REF_GROUP_FLDREF_GROUP_REVREF_GROUP_IGN_REVREF_GROUP_FLD_REVr  r:   rk  rs  r  r  r  rk  rD   r?   r>   r   r   m  s       z5.A5)2<.:0@:
C!Hd#3R5Etb2	4G :@ @ @ @ @@ @ @P P PM M M' ' '      r?   r   c                        e Zd Zej        ZdZdS )r  SEARCH_ANCHORN)r@   rA   rB   r  r}  r  r  rD   r?   r>   r  r    r  r?   r  c                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Zd Zd Zed             Zed             Zed             Zd Zd Zd Zd ZdS )r   Nc                 P    t                               |            |g }|| _        d S r   )r`  r:   r  )r;   r  s     r>   r:   zSequence.__init__  s+    4   =E


r?   c                 H    | j         D ]}|                    |||           d S r   )r  rk  )r;   r2   r   rj  rs   s        r>   rk  zSequence.fix_groups  s6     	2 	2ALL'51111	2 	2r?   c                     g }| j         D ]]}|                    ||          }t          |t                    r|                    |j                    H|                    |           ^t          |          S r   )r  r   r/   r   r   r[   r^  )r;   r   r   r  rs   s        r>   r   zSequence.optimise  ss     	  	 A

4))A!X&&  QW%%%%QU###r?   c                 Z   g }g }t           }| j        D ]k}t          |          t          u rt|j        rm|j        sf|j        |k    r@|j        st          |j                  r$t          
                    |||           |j        }|                    |j                   t          |          t          u st          |          t          u rm|j        |k    rF|j        st          fd|D                       r$t          
                    |||           |j        }|                    |j                   &t          
                    |||           |                    |                                         mt          
                    |||           t%          |          S )z+Packs sequences of characters into strings.c              3   8   K   | ]}t          |          V  d S r   r   r   r   r   s     r>   r  z+Sequence.pack_characters.<locals>.<genexpr>  s=       +" +"1:dA+>+> +" +" +" +" +" +"r?   )r   r  r  r   r   r   r   r   r_   r   _flush_charactersr[   r  r  r  r   r  rq  r^  )r;   r   r  r  r   rs   s    `    r>   rq  zSequence.pack_characters  s   

 	6 	6AAww)##
#1;#<:-- | 2z$'@'@ 2 224$e- - - &'\
!!!'****aF""d1gg&8&8<:-- | 2s +" +" +" +" +" +" +" (" (" 2 224$e- - - &'\
!!!,////**4ZOOOQ..t445555""4ZGGGU###r?   c                 2    d | j         D             | _         | S )Nc                 6    g | ]}|                                 S rD   r  r   rs   s     r>   r   z,Sequence.remove_captures.<locals>.<listcomp>  s$    >>>aa''))>>>r?   r]  rc  s    r>   rs  zSequence.remove_captures  s    >>4:>>>
r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r>   r  z%Sequence.is_atomic.<locals>.<genexpr>  *      55Q1;;==555555r?   r  r  rc  s    r>   rv  zSequence.is_atomic  !    55$*555555r?   c                     dS r{  rD   rc  s    r>   ry  zSequence.can_be_affix  r}  r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r>   r  z*Sequence.contains_group.<locals>.<genexpr>  s.      ::!1##%%::::::r?   )r  r  rc  s    r>   r|  zSequence.contains_group  s!    ::tz::::::r?   c                     t                      }| j        }|r|                                 |D ]7}||                    |          z  }d |vr|c S |                    d            8|t          d g          z  S r   )r   r  r   r  discard)r;   r   r   r  rs   s        r>   r  zSequence.get_firstset  s    UU
 	MMOOO 	 	A!..)))B2~~			JJtCKKr?   c                 h    t          | j                  o| j        d                                         S r  )r   r  r  rc  s    r>   r  zSequence.has_simple_start  s)    DJDDJqM$B$B$D$DDr?   c                     | j         }|r|d d d         }g }|D ]+}|                    |                    ||                     ,|S r  )r  r   r   )r;   r   rj  seqr   rs   s         r>   r  zSequence._compile  s\    j 	ddd)C 	3 	3AKK		'5112222r?   c                 F    | j         D ]}|                    ||           d S r   )r  r  )r;   r  r   rs   s       r>   r  zSequence.dump  s4     	$ 	$AFF67####	$ 	$r?   c                     |sd S |t           z  r"t           fd|D                       st          }|t          z  t          k    rt                              |          }|D ]u}|j        }t          |          dk    r0|                    t          |d         |j
                             L|                    t          ||j
                             vnbt          |          dk    r+|                    t          |d         |                     n$|                    t          ||                     g |d d <   d S )Nc              3   8   K   | ]}t          |          V  d S r   r  r  s     r>   r  z-Sequence._flush_characters.<locals>.<genexpr>  s-      ??qz$**??????r?   r.   r   r   )r   r  r   rF  r   _fix_full_casefoldr  r^   r[   r   r   r  )r   r  r   r  literalsr   charss   `      r>   r  zSequence._flush_characters  sN    	F 
" 	$????J????? $#
'N::22:>>H  L Lu::??LL58!P!P!PQQQQLL$/!J!J!JKKKKL :!##Yz!}LLLMMMMVJ:FFFGGG
111r?   c                 2   d t          j                    D             }t          j        t          d                    d | D                                                                 }g }|D ]Y} |j        |          }|dk    rA|                    ||t          |          z   f            |j        ||dz             }|dk    AZd}g }t          
                    |          D ]o\  }}	||k     r1|                    t          | ||         t                               |                    t          | ||	         t                               |	}p|t          |           k     r1|                    t          | |d          t                               |S )Nc                 B    g | ]}t          j        t          |          S rD   )r   r   rK  r  s     r>   r   z/Sequence._fix_full_casefold.<locals>.<listcomp>,  s2     * * *qF$%6:: * * *r?   rg   c              3   4   K   | ]}t          |          V  d S r   rI  r  s     r>   r  z.Sequence._fix_full_casefold.<locals>.<genexpr>.  s=       = = >AVV = = = = = =r?   r   r.   r   )r   rL  r   rK  r]   ra  findr[   r^   r   _merge_chunksr  r   rF  )
r  expandedr   chunksrn   foundr3   r  r  r  s
             r>   r  zSequence._fix_full_casefold(  s   * *

&
(
(* * *!"3RWW = == = = 6 6     % 	 	2 	2AFKNNE1**uec!ffn5666#Auqy11 1** "0088 	 	JE3U{{
3;(?'!) !) !) * * * OOGJus{$;') ) ) * * *CCZ  OOGJsuu$6:NNNOOOr?   c                 $   t          |           dk     r| S |                                  | d         \  }}g }| dd          D ]7\  }}||k    rt          ||          }|                    ||f           ||}}8|                    ||f           |S )NrO   r   r.   )r^   sortr<  r[   )r  r  r  
new_chunksrs   rn   s         r>   r  zSequence._merge_chunksJ  s    v;;??MAY
s
133L 	" 	"DAqCxx#qkk!!5#,///s5#,'''r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   rQ  rJ  s     r>   r  z$Sequence.is_empty.<locals>.<genexpr>`  s*      44A1::<<444444r?   r  rc  s    r>   r  zSequence.is_empty_  s!    44444444r?   c                 ^    t          |           t          |          u o| j        |j        k    S r   )r  r  r  s     r>   r  zSequence.__eq__b  rf  r?   c                 >    t          d | j        D                       S )Nc              3   >   K   | ]}|                                 V  d S r   r  r  s     r>   r  z%Sequence.max_width.<locals>.<genexpr>f  r  r?   )sumr  rc  s    r>   r  zSequence.max_widthe  r  r?   c                     | j         }|r|d d d         }d}|D ]'}|                    |          \  }}||z  }|r||fc S (|d fS )Nr  r   )r  r  )r;   r   r  r  rs   r  r  s          r>   r  zSequence.get_required_stringh  s}    j 	ddd)C 	# 	#A,,W55HCcMF #s{"""# t|r?   r   )r@   rA   rB   r:   rk  r   rq  rs  rv  ry  r|  r  r  r  r  rU  r  r  r  r  r  r  r  rD   r?   r>   r   r     sb          2 2 2
$ 
$ 
$$$ $$ $$L  6 6 6  ; ; ;     E E E	 	 	$ $ $   \6   \B   \(5 5 5G G G6 6 6    r?   r   c                   L    e Zd ZdedfdZd Zd Zd Zd Zd Z	d	 Z
d
 Zd ZdS )r9  TFc                 <   t                               |            || _        t          |          | _        t          |          | _        t          |         | _        t          |          | _	        d| _
        | j        | j        | j        | j        | j	        f| _        d S r  )r`  r:   r   r|   r  r   r   re  r   r   
char_widthrZ   rb  )r;   r   r  r   r   r   s         r>   r:   zSetBase.__init__x  sz    4   	5\\
X1*=i^TZ
/4>+			r?   c                      t          |           | j        | j        |||                              | j        d          S r{  )r  r   r  r   rg  s       r>   rf  zSetBase.rebuild  s<    tDzz$)TZ:
 Xdi//	0r?   c                 "    t          | g          S r   r  r  s     r>   r  zSetBase.get_firstset  r  r?   c                     dS ru  rD   rc  s    r>   r  zSetBase.has_simple_start  rw  r?   c                 6   d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }| j        | j        |f         |fg}| j        D ])}|                    |	                                           *|
                    t          j        f           |S r  )r   r  r   r  r  r  r   r  r   r   r[   r  r  )r;   r   rj  r   r   rb   s         r>   r  zSetBase._compile  s    = 	![ E> 	"\!E 	XEdow67?@ 	% 	%AKK		$$$$RVJr?   c           	          t          d                    t          |z  | j        t          | j                 t          | j                                      | j        D ]}|	                    |dz   |           d S )Nr  r.   )
r  r8   r  r  r  r   r  r   r  r  )r;   r  r   rp   s       r>   r  zSetBase.dump  s|    k  &$-
4=
!9T_#=? ? 	@ 	@ 	@ 	( 	(AFF6A:w''''	( 	(r?   c                     | j         r| j        t          z  r|r| S | j        j        t
          z  r| j        t          z  t          k    r| S t          j                    }g }t                      }|D ]}| 
                    t          |                    rft          j        t          |          }||vrH|                    t          d |D             | j                             |                    |           |s| S t#          | g|z             S )Nc                 ,    g | ]}t          |          S rD   r~  r  s     r>   r   z0SetBase._handle_case_folding.<locals>.<listcomp>  s    (@(@(@AQ(@(@(@r?   r   )r   r   r   r   r   r   rF  r   rL  r   r  r   r   rK  r[   r  r   r   )r;   r   r   rN  r  seenr   rM  s           r>   _handle_case_foldingzSetBase._handle_case_folding  s/   } 	T_z%A 	f 	K 7* 	
1+0, 0,K !688 uu! 	% 	%B||CGG$$ %)*;R@@%%LL(@(@(@(@(@!%"2 "2 "2 3 3 3HHV$$$ 	Ktfun%%%r?   c                    | j         r| j        t          z  sdS | j        j        t
          z  r| j        t          z  t          k    rdS t          j                    }t                      }|D ]S}| 
                    t          |                    r/t          j        t          |          }|                    |           T|sdS t          d |D                       S )Nr.   c              3   4   K   | ]}t          |          V  d S r   r  )r   rM  s     r>   r  z$SetBase.max_width.<locals>.<genexpr>  s(      2263v;;222222r?   )r   r   r   r   r   r   rF  r   rL  r   r  r   r   rK  r   r<  )r;   rN  r  r   rM  s        r>   r  zSetBase.max_width  s    } 	T_z%A 	1 7* 	
1+0, 0,1 !688 uu! 	! 	!B||CGG$$ !)*;R@@    	122T222222r?   c                     d | _         d S r   rj  rc  s    r>   rk  zSetBase.__del__  rl  r?   N)r@   rA   rB   r   r:   rf  r  r  r  r  r  r  rk  rD   r?   r>   r9  r9  w  s        -1f+ + + +0 0 0       ( ( (& & &<3 3 32    r?   r9  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdZddZd ZdS )r
  FTSET_DIFFc                    | j         }t          |          dk    r |d         t          |dd                    g}t          |          dk    r<|d                             | j        | j                                      |          S t          fd|D                       | _         |                     |          S )NrO   r   r.   r   c              3   H   K   | ]}|                     d           V  dS )Tr   N)r   )r   rb   r   r   s     r>   r  z#SetDiff.optimise.<locals>.<genexpr>  sE        a1::dGD:AA      r?   )	r  r^   r   r   r   r   r   r|   r  )r;   r   r   r   r  s    ``  r>   r   zSetDiff.optimise  s    
u::>>1XxeACCk::;Eu::??8&&$/ ' ( ((0w(G(GH      
    
 ((v666r?   c                     | j         d                             |          o | j         d                             |           }|| j        k    S Nr   r.   r  r  r   r;   r   rb   s      r>   r  zSetDiff.matches  sD    JqM!!"%%Gdjm.C.CB.G.G*GDM!!r?   Nr  )r@   rA   rB   r   r  r  r   SET_DIFF_IGNr   rF  SET_DIFF_REVSET_DIFF_IGN_REVr  r  r   r  rD   r?   r>   r
  r
    s        j%-@o%("+7No~rT8JHd+R_~
? 	"G
 H7 7 7 7" " " " "r?   r
  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdZddZd ZdS )r  FT	SET_INTERc                    g }| j         D ]f}|                    ||d          }t          |t                    r"|j        r|                    |j                    Q|                    |           gt          |          dk    r<|d                             | j	        | j
                                      |||          S t          |          | _         |                     ||          S NTr   r.   r   r   )r  r   r/   r  r   r   r[   r^   r   r   r   r|   r  r;   r   r   r   r  rb   s         r>   r   zSetInter.optimise  s     	  	 A

4
66A!X&&  1:  QW%%%%Qu::??8&&$/ ' ( ((0w(G(GH 5\\
((v666r?   c                 Z    t          fd| j        D                       }|| j        k    S )Nc              3   B   K   | ]}|                               V  d S r   r  r   rp   r   s     r>   r  z#SetInter.matches.<locals>.<genexpr>  -      22!		"222222r?   )r  r  r   r  s    ` r>   r  zSetInter.matches  4    2222tz22222DM!!r?   Nr  )r@   rA   rB   r   r  r  r   SET_INTER_IGNr   rF  SET_INTER_REVSET_INTER_IGN_REVr  r  r   r  rD   r?   r>   r  r    s        z5.A5)2<.:0@:
C!Hd#3R5Etb2	4G
 H7 7 7 7$" " " " "r?   r  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdZddZd ZdS )r  FTSET_SYM_DIFFc                    g }| j         D ]f}|                    ||d          }t          |t                    r"|j        r|                    |j                    Q|                    |           gt          |          dk    r<|d                             | j	        | j
                                      |||          S t          |          | _         |                     ||          S r  )r  r   r/   r  r   r   r[   r^   r   r   r   r|   r  r  s         r>   r   zSetSymDiff.optimise   s     	  	 A

4
66A!Z((  QZ  QW%%%%Qu::??8&&$/ ' ( ((0w(G(GH 5\\
((v666r?   c                 b    d}| j         D ]}||                    |          k    }|| j        k    S r{  r  )r;   r   rb   rp   s       r>   r  zSetSymDiff.matches2  s;     	# 	#AQYYr]]"AADM!!r?   Nr  )r@   rA   rB   r   r  r  r   SET_SYM_DIFF_IGNr   rF  SET_SYM_DIFF_REVSET_SYM_DIFF_IGN_REVr  r  r   r  rD   r?   r>   r  r    s        *e1DHe,bo@!FD>23F4"1Hd3CND123J	LG
 H7 7 7 7$" " " " "r?   r  c                       e Zd Zedfej        edfej        edfej        e	dfej        edfej
        edfej        edfej
        e	dfej        iZdZddZd Zd ZdS )	r   FT	SET_UNIONc                 N   g }| j         D ]}|                    ||d          }t          |t                    r"|j        r|                    |j                    Qt          |t                    rt                      c S |                    |           t                      t                      f}|D ]I}t          |t                    r2||j                 
                    |j        |j        |j        f           J|d         |d         z  rt                      S t          |          dk    rM|d         }|                    |j        | j        k    | j        | j                                      |||          S t!          |          | _         |                     ||          S )NTr   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  rb   
propertiesrp   s           r>   r   zSetUnion.optimiseA  s    	  	 A

4
66A!X&&  1:  QW%%%%Av&&  xxQ eeSUU^
 	Q 	QA!X&& Q1:&**AGQ\1;+OPPPa=:a=( 	88Ou::??aA<<t})D   ( ((0w(G(GH 5\\
((v666r?   c                 R   d}| j         r
|t          z  }| j        r
|t          z  }|r
|t          z  }t          t                    g }}| j        D ]R}t          |t                    r&||j                  
                    |j                   =|
                    |           S| j        | j        |f         |fg}|                                D ]\  }}	d}|r
|t          z  }t          |	          dk    r)|
                    t          j        ||	d         f           O|
                    t          j        |t          |	          ft%          |	          z              |D ])}|                    |                                           *|
                    t          j        f           |S r  )r   r  r   r  r  r   r   r  r/   r   r[   r_   r  r   r^   r  r  STRINGr|   r   r   r  )
r;   r   rj  r   r  othersrb   r   r   valuess
             r>   r  zSetUnion._compilea  s   = 	![ E> 	"\!E 	XE(..F
 	! 	!A!Y'' !1:&--ag6666a    dow67?@ * 0 0 2 2 	M 	MHfE %$6{{aR\5&)<====RYs6{{;eFmmKLLLL 	% 	%AKK		$$$$RVJr?   c                 Z    t          fd| j        D                       }|| j        k    S )Nc              3   B   K   | ]}|                               V  d S r   r  r  s     r>   r  z#SetUnion.matches.<locals>.<genexpr>  r  r?   )r  r  r   r  s    ` r>   r  zSetUnion.matches  r  r?   Nr  )r@   rA   rB   r   r  r  r   SET_UNION_IGNr   rF  SET_UNION_REVSET_UNION_IGN_REVr  r  r   r  r  rD   r?   r>   r   r   9  s        z5.A5)2<.:0@:
C!Hd#3R5Etb2	4G
 H7 7 7 7@     D" " " " "r?   r   c                        e Zd ZdZej        ZdS )SkipSKIPN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r    s        HgGGGr?   r  c                        e Zd Zej        ZdZdS )r   START_OF_LINEN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r     r  r?   r   c                        e Zd Zej        ZdZdS )r   START_OF_LINE_UN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r              G HHHr?   r   c                        e Zd Zej        ZdZdS )r   START_OF_STRINGN)r@   rA   rB   r  r  r  r  rD   r?   r>   r   r     r  r?   r   c                        e Zd Zej        ZdZdS )StartOfWordSTART_OF_WORDN)r@   rA   rB   r  r  r  r  rD   r?   r>   r  r    r  r?   r  c                       e Zd Zedfej        edfej        edfej        e	dfej
        edfej        edfej        edfej        e	dfej        iZefdZd Zd Zd Zd Zd Zd	 Zd
S )r  FTc                    t          |          | _        t          |         | _        | j        t          z  t          k    rSg }| j        D ]H}t          j        t          t          |                    }|	                    d |D                        In| j        }t          |          | _
        d| _        | j        | j        | j        f| _        d S )Nc              3   4   K   | ]}t          |          V  d S r   r~  r  s     r>   r  z"String.__init__.<locals>.<genexpr>  s(      (@(@AQ(@(@(@(@(@(@r?   F)r|   r  re  r   rF  r   r   rK  rI  r   r  requiredrZ   rb  )r;   r  r   r  r   rM  s         r>   r:   zString.__init__  s    
++1*=On,?? " A A)*;SYYGG!(((@(@(@(@(@@@@@A !%!&'8!9!9NDOT_D			r?   c                 n    |rd}nd}t          t          | j        |         | j                  g          S )Nr  r   r   )r   r   r  r   )r;   r   r3   s      r>   r  zString.get_firstset  sL     	CCCIdoc2_& & & ' ( ( 	(r?   c                     dS ru  rD   rc  s    r>   r  zString.has_simple_start  rw  r?   c                     d}|r
|t           z  }| j        r
|t          z  }| j        | j        |f         |t          | j                  f| j        z   gS r  )r  r  REQUIRED_OPr  r   r^   r  r  s       r>   r  zString._compile  sk     	XE= 	![ Edow67
d$
%
%')-)?@ A 	Ar?   c                    t          d                    d | j        D                                                     d          }t	          d                    t          |z  |t          | j                                      d S )Nrg   c              3   4   K   | ]}t          |          V  d S r   r  r  s     r>   r  zString.dump.<locals>.<genexpr>  s(      @@1A@@@@@@r?   r  z{}STRING {}{})	r  r]   r  r  r  r8   r  r  r   r  s       r>   r  zString.dump  sz    @@@@@@@AAHHNNo$$Vf_g
DO
$& & 	' 	' 	' 	' 	'r?   c                 *    t          | j                  S r   )r^   r  rc  s    r>   r  zString.max_width  s    4)***r?   c                 
    d| fS r  rD   r  s     r>   r  zString.get_required_string  s    $wr?   N)r@   rA   rB   r   r  r  r   
STRING_IGNr   rF  
STRING_FLD
STRING_REVSTRING_IGN_REVSTRING_FLD_REVr  r:   r  r  r  r  r  r  rD   r?   r>   r  r    s        	J+>^U$;R]tnbmj$%79J'=	G /5 E E E E"( ( (  A A A' ' '
+ + +    r?   r  c                       e Zd Zd ZdS )r  c                 
   d                     d | j        D                       }t          |                              d          }t	          d                    t          |z  |t          | j                                      d S )Nrg   c              3   4   K   | ]}t          |          V  d S r   r  r  s     r>   r  zLiteral.dump.<locals>.<genexpr>  s(      ::Q#a&&::::::r?   r  z{}LITERAL MATCH {}{})	r]   r  r  r  r  r8   r  r  r   )r;   r  r   literalr  s        r>   r  zLiteral.dump  s~    ''::$/:::::..''--$++FVOW
DO
$& & 	' 	' 	' 	' 	'r?   N)r@   rA   rB   r  rD   r?   r>   r  r    s#        ' ' ' ' 'r?   r  c                   $    e Zd ZefdZd Zd ZdS )r   c                 |   || _         || _        t                   | _        | j        | j        | j        f| _        || j        f| _        | j        |j        vr!t          |j                  |j        | j        <   | j         j        | j                 }| j         j	        | j                 }| j        | j         j
        t          z  }|z  }g }|D ]D}	t          |	t                    rd |	D             }	|                    fd|	D                        E|                    t          d           d |D             | _        d S )Nc                 ,    g | ]}t          |          S rD   r~  r  s     r>   r   z&StringSet.__init__.<locals>.<listcomp>  s    111Q#a&&111r?   c                 2    g | ]}t          |           S )r   r  )r   r   r   s     r>   r   z&StringSet.__init__.<locals>.<listcomp>  s2       AIaJ???   r?   T)r@  r   c                 ,    g | ]}t          |          S rD   )r   )r   choices     r>   r   z&StringSet.__init__.<locals>.<listcomp>  s     @@@f&))@@@r?   )r   r   re  r   rZ   rb  set_keynamed_lists_usedr^   r  r   r   r/   r0   r[   r  r   )
r;   r   r   r   rX  r  r  
fold_flagschoicesr   s
      `      r>   r:   zStringSet.__init__  sU   		1*=NDIt>	do.<t44425d6K2L2LD!$,/	*4<8	 +_
9?^3
*
 	 	F&#&& 211&111NN           	d+++@@@@@r?   c                     t          d                    t          |z  | j        t          | j                                      d S )Nz{}STRING_SET {}{})r  r8   r  r   r  r   r  s      r>   r  zStringSet.dump  sE    !((&$)
DO
$& & 	' 	' 	' 	' 	'r?   c                     d | _         d S r   rj  rc  s    r>   rk  zStringSet.__del__  rl  r?   N)r@   rA   rB   r   r:   r  rk  rD   r?   r>   r   r     sN        .4 A A A AB' ' '    r?   r   c                   R    e Zd ZdZd ZddZddZddZdd	Zdd
Z	d Z
d Zd ZdS )Sourcez1Scanner for the regular expression source string.c                     t          |t                    r|| _        t          | _        n |j        d          | _        d | _        d| _        d| _        |d d         | _        d S )Nzlatin-1c                 "    t          | g          S r   )rL  r7  s    r>   r>  z!Source.__init__.<locals>.<lambda>
  s    uaSzz r?   r   F)	r/   r0   r   rI  	char_typedecoder3   rV  rK  )r;   r   s     r>   r:   zSource.__init__  sc    fc"" 	2 DK DNN'&-	22DK11DN!3Q3<r?   Fc                 "   | j         }| j        }	 | j        rC|sA	 ||                                         r|dz  }n||         dk    r |j        d|          }nn@||         S # t
          $ r |d d         cY S t          $ r |d d         cY S w xY wNTr.   rJ  r,   r   )r   r3   rV  isspacerX  rW  r2  )r;   override_ignorer   r3   s       r>   r_  zSource.peek  s    h	   	 	c{**,, q++*fl455 #; 	  	  	 3Q3< 	  	  	 3Q3<	 s   AA" "B8BBc                 p   | j         }| j        }	 | j        rC|sA	 ||                                         r|dz  }n||         dk    r |j        d|          }nn@||         }|dz   | _        |S # t
          $ r || _        |d d         cY S t          $ r! t          |          | _        |d d         cY S w xY wr!  )r   r3   rV  r"  rX  rW  r2  r^   )r;   r#  r   r3   r   s        r>   r   z
Source.get(  s    h	   	 	c{**,, q++*fl455 BQwDHI 	  	  	 DH3Q3< 	  	  	 6{{DH3Q3<	 s   AA. .B5'B54B5r.   c                    | j         }| j        }	 | j        rg }t          |          |k     rt	 ||                                         r|dz  }n||         dk    r |j        d|          }nn@|                    ||                    |dz  }t          |          |k     td                    |          }n||||z            }|t          |          z  }|| _        |S # t          $ r, t          |          | _        d                    |          cY S t          $ r, t          |          | _        d                    |          cY S w xY wNTr.   rJ  r,   rg   )
r   r3   rV  r^   r"  rX  r[   r]   rW  r2  )r;   r4   r   r3   	substrings        r>   get_manyzSource.get_manyD  s|   h 	&  &	)nnu,,"!#;..00 "1HCC#C[C//".&,tS"9"9CC!" $$VC[1111HC )nnu,, GGI..		"3u#45	s9~~%DH 	& 	& 	&6{{DH779%%%%% 	& 	& 	&6{{DH779%%%%%	&s   CC 3E2EETc                    | j         }| j        }| j        r|s	 g }	 ||                                         r|dz  }nN||         dk    r |j        d|          }n0||         |v |k    r!|                    ||                    |dz  }nno|| _        nC# t          $ r t          |          | _        Y n#t          $ r t          |          | _        Y nw xY wd	                    |          S 	 ||         |v |k    r|dz  }||         |v |k    || j        |         }|| _        |S # t          $ r || j        |         }|| _        |cY S w xY wr&  )
r   r3   rV  r"  rX  r[   rW  r^   r2  r]   )r;   test_setrQ  r  r   r3   r'  s          r>   rC  zSource.get_whilej  s   h *	![ *	!'	c{**,, 
q++*fl455 +1g==!((555q  ' ' 'v;; ' ' 'v;;' 779%%%!c{h.7::1HC c{h.7:: #48c>2	   ! ! !"48c>2	    !s*   A9B C3CC,8D% %"E
	E
c                    | j         }| j        }	 | j        rV	 ||                                         r|dz  }n3||         dk    r |j        d|          }n||         |v |k    r|dz  }nnTn!||         |v |k    r|dz  }||         |v |k    || _        d S # t
          $ r t          |          | _        Y d S t          $ r t          |          | _        Y d S w xY wNTr.   rJ  r,   )r   r3   rV  r"  rX  rW  r^   r2  )r;   r*  rQ  r   r3   s        r>   
skip_whilezSource.skip_while  s+   h	#  
c{**,, 	q++*fl455 +1g==q
 c{h.7::1HC c{h.7:: DHHH 	# 	# 	#6{{DHHHH 	# 	# 	#6{{DHHHH	#s   BB C8CCc                    | j         }| j        }| j        r	 |D ]W}	 ||                                         r|dz  }n||         dk    r |j        d|          }nn@||         |k    r dS |dz  }X|| _        dS # t
          $ r Y dS t          $ r Y dS w xY w |j        ||          sdS |t          |          z   | _        dS )NTr.   rJ  r,   F)	r   r3   rV  r"  rX  rW  r2  rA  r^   )r;   r'  r   r3   r   s        r>   r   zSource.match  s"   h !	"  A"!#;..00 "1HCC#C[C//".&,tS"9"9CC!" c{a''$uu1HCCt   uu   uu %6$Y44 uS^^+DH4s   AA: +A: :
B	BBc                     |                      |          s.t          d                    |          | j        | j                  d S )Nz
missing {})r   r'   r8   r   r3   )r;   r'  s     r>   rU  zSource.expect  sG    zz)$$ 	O++I66TXNNN	O 	Or?   c                    | j         }| j        }	 | j        rA	 ||                                         r|dz  }n||         dk    r |j        d|          }nn@|t          |          k    S # t          $ r Y dS t          $ r Y dS w xY wr,  )r   r3   rV  r"  rX  r^   rW  r2  )r;   r   r3   s      r>   at_endzSource.at_end  s    h	  c{**,, q++*fl455 #f++%% 	 	 	44 	 	 	44	s   AA+ +
B8	BBNr  r.   )TF)T)r@   rA   rB   rC   r:   r_  r   r(  rC  r-  r   rU  r1  rD   r?   r>   r  r    s        77
  
  
        0       8$& $& $& $&L.! .! .! .!`# # # #:% % %NO O O    r?   r  c                   4    e Zd ZdZddi fdZddZd Zd ZdS )	Infoz"Info about the regular expression.r   Nc                    |t           |t          z  pt                   z  }|| _        || _        d| _        || _        d| _        i | _        i | _	        || _
        i | _        g | _        i | _        i | _        g | _        i | _        d S NFr   )DEFAULT_FLAGSr  r  r   r  r  r  r~  rY  
group_namer  r  open_groupsrZ  r
  r[  r  )r;   r   r  r  s       r>   r:   zInfo.__init__  s     5I/JJ
!"" " "  r?   c                    | j                             |          }|@	 | xj        dz  c_        || j        | j        vrn"| j        }|r|| j         |<   || j        |<   || j        v r$t          | j                  dz    }|| j        |<   |}| j                            |           | j                            |d          dz   | j        |<   |S )NTr.   r   )	rY  r   r~  r8  r9  r^   r  r[   rZ  )r;   r   rf  group_aliass       r>   rT  zInfo.open_group  s     $$T**=  A%  <4#34?#J#J
 $E .). &)-&D$$$   344q89K/4D,E&&&'+'<'@'@'J'JQ'Ne$r?   c                 8    | j                                          d S r   )r9  r   rc  s    r>   rW  zInfo.close_group(  s    r?   c                     | j         t          z  pt          }|t          k    rdS |                                rt          |          }n| j                            |          }|| j        v S r{  )	r   r  r  r"   r  r  rY  r   r9  )r;   r   r  rf  s       r>   rn  zInfo.is_open_group+  sf     :-A/h5<<>> 	/IIEE$((..E(((r?   r   )r@   rA   rB   rC   r:   rT  rW  rn  rD   r?   r>   r4  r4    sg        (($r ! ! ! !&   4  ) ) ) ) )r?   r4  c                 6   i }g }| j         D ]\  }}}|j        ||f}|                    |          }||j        dk    rot          | j        t
          z            }	t          |t                    }
|	|
f||fk    r3|                    t          t          |          |          ||f           nB| j        |j                 }|d         }|dd         ||fk    r|                    |||f           t          |          }|||<   ||_        || _        || _        dS )zkChecks whether the reverse and fuzzy features of the group calls match
    the groups which they call.
    Nr   r.   )r[  rf  r   r   r   r   r/   r	  r[   rn  r^   r
  rc  r  additional_groups)r   rq  r  r?  callr   rj  r@  rp  revfuzdef_inforf  s                r>   _check_group_featuresrD  9  sF    I $ 0  guz7E*mmC  ;zQ4:/00 //:'5!111 &,,gc)nnf.M.Mu.& ' ' '  .tz: ACC>gu%555 &,,eWe-DEEEi..C IcNDN.Dr?   c                     |                      t          |t          z                      \  }}|r8d|_        |t          k    rd}|j        }|t          z  s|t           z  }|j        }nd}d}d}|||fS )z>Gets the required string and related info of a parsed pattern.Tr  r   rD   )r  r   r   r  r  r   r   r  )rq  r   
req_offsetr  	req_flags	req_charss         r>   _get_required_stringrI  `  s     "55d57?6K6KLLJ  ""J'	 	"'!I.		
		y)++r?   c                       e Zd ZddZd ZdS )r(   r   c                 P   || _         g }|D ]\  }}t          |          }t          ||j                  t	          j        t          z            |_        t          |          }|	                                st          d|j        |j                  |                    |                                           t          |          fdt          |          D             }t!          |          }t	          j        t"          z            }|                    |          }|                              }t)          |j                  \  }	}
}t+          |           j        rt          d|j        |j                  t	          j        t"          z            }|                    |          t0          j        fgz   }t5          |          }|                                sI	 t9          |                    |                    }t5          |          }||z   }n# t<          $ r Y nw xY wj        t>          z  pt@          }|dtB          tD          fvrtG          d          tI          j        d |tJ          z  |z  |i i i g |	|
|tM          |                    | _'        d S )Nzunbalanced parenthesisc                 >    g | ]\  }}t          |d z   |          S r2  )r  )r   r  rq   r   s      r>   r   z$Scanner.__init__.<locals>.<listcomp>  s-    JJJdaE$Aq))JJJr?   z(recursive regex not supported by Scannerr   z5VERSION0 and VERSION1 flags are mutually incompatible)(lexiconr  r4  r  r   r   r&   rV  r   r1  r'   r   r3   r[   rs  	enumerater   r   r   rq  rI  rD  r  r   r  SUCCESSr   r  r   r  rL   r  r  r    r"   r2  r   r  r^   scanner)r;   rM  r   patternsphraseactionr   rq  r   rF  rH  rG  r   fs_coder  r   s                  @r>   r:   zScanner.__init__v  s    % 	6 	6NFFF^^Fv/00D"&tzG';"<"<F#FD11F==?? 4fm*   OOF22445555 E{{JJJJi6I6IJJJ!! tzG+,,w//''-- ,@
*, ,(
Iy 	dF+++ > 	)BmVZ) ) ) tzG+,, ~~g&&2:.)99 T""&&(( 	+D&2E2Eg2N2NOO'00~!    :-A/1h111TUUU ~dU\-AW,L
BB
Iy
h-- s   -7H% %
H21H2c                    g }|j         }| j                            |          j        }d}	  |            }|sn{|                                }||k    rn`| j        |j        dz
           d         }t          |d          r%|| _         || |                                          }| ||           |}|||d          fS )Nr   Tr.   __call__)r[   rP  r   r  rM  	lastindexr   rf  )	r;   r   r,  r[   r   rp   rb   jrS  s	            r>   scanzScanner.scan  s    $$V,,2	A AAvv\!+/215Fvz** 1
aggii00!vA	 vacc|##r?   N)r   )r@   rA   rB   r:   rY  rD   r?   r>   r(   r(   u  s<        G G G GR$ $ $ $ $r?   r(   r?  r,   	)rl   rm   ro   nrr   tr  DigitTBlankSpaceWord)r  r	   hrs   r   ru   r#   r  )r  r	   rs   r   ru   r#   )r   rm   r   Krb   r   Z)rm   r   rb   r   )FAILr   r\  r  )ry   r  r  r6  (  enumr   r  collectionsr   regexr   __all__r9   r'   rF   rJ   rL   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   r7  r  SCOPED_FLAGS	frozensetascii_lettersr&  r3  r*  r  	octdigitsr  	hexdigitsr  r   r  r  r  get_code_sizeBYTES_PER_CODEBITS_PER_CODEr  r  r   r   rF  rK  re  r  OPCODESrx   r  rN  r&  rp   r  setattrr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r   r  r"  r)  r'  r(  r#  r=  r   r  r   rX  rY  rR  rZ  ru  r[  r\  r]  r`  r^  r  r  r  ra  r  rS  r  r  r  r   r  r  r  r  r  r  r  r  r   r  r   r  r  r  r  r  r  r  r-  r2  r   r=  r@  r  rN  rH  rJ  rI  r  r  r  r  r  r   r  r  r  r^  r`  r  r   r   r   r|  r  r   r  rn  r   rv  r  r  r  r   r   r  r   r   r  r  r	  r  r  r   r  r  r   r  rq  rz  r  r?  r[  r  r   r  r   r9  r
  r  r  r   r  r   r   r   r  r  r  r   r  r4  rD  rI  r(   get_propertiesr>  rR  r  r  rC  r  r   r   prop_valuesr<  r^   val_namerE  r  r  r  r  dictr  r   r  r  r  r  r  rc  rD   r?   r>   <module>r}     sG          # # # # # #        * * * * *I * * *>	 	 	 	 	y 	 	 		 	 	 	 	 	 	 		 	 	 	 	Y 	 	 	1 1 1 1 1 1 1 1j 				%!
			





~KKKKKKKKKKKK\\KKK8#') 1h1 	)E1L@5H	
:%	1F:TAGK 		&&''	6=	!	!Yv'((
Yv'((
	*++iioo=))D//)YYw/// 
" &%''" -1$	 	8YUG88$	  
"
	
J&n, a1j*."  AA&&Rj	 	 	 	 	 	 	 	 Y[[Yw}}''  EArGBA0. 0. 0. 0.d+ + +; ; ;6 6 6    >    > > > >L L LC C C= = =  R R Rh  @5 5 5 ))<<  4 4 4     <  01 1 1; ; ;z
A 
A 
A      6
 
 
H H H4$ $ $Z* Z* Z*x"? "? "?H  "
4 
4 
4)F )F )FV  (
 
 
  $	' 	' 	'' ' '' ' '     "  &!@ !@ !@F5 5 5
   &2 2 2. . .2 2 2Q5 Q5 Q5f4 4 4B  *     .	1 	1 	1' ' '2 2 2 "1 "1 "1H  ,  4! ! !# # #! ! !     ! ! !.') ') ')R$ $ $LL L L	% 	% 	%  *E E E /5577880668899D? D? D? D?LF' F' F'P
$ 
$ 
$  "* * ** 

 g..R%:Hb%'	  C& C& C& C& C& C& C& C&L    I   :    )   &	2 	2 	2 	2 	2S 	2 	2 	2    3   6< 6< 6< 6< 6<Y 6< 6< 6<p    }   F9 F9 F9 F9 F9Y F9 F9 F9P, , , , ,	 , , ,\! ! ! ! !i ! ! !H H H H H	 H H HTW W W W W) W W Wr" " " " "m " " "% % % % %} % % %' ' ' ' ' ' ' '                  -   $ $ $ $ $m $ $ $& & & & & & & &                m      C% C% C% C% C%I C% C% C%J    y   + + + + + + + +Z' Z' Z' Z' Z'9 Z' Z' Z'x2 2 2 2 2| 2 2 2<P P P P PI P P Pd    =          B B B B B B B BHS& S& S& S& S&I S& S& S&j" " " " "i " " "6 6 6 6 6y 6 6 6p    M   K K K K KI K K KZ/ / / / /y / / /b    =   S S S S Sy S S Sjg g g g gi g g gR" " " " "g " " "4" " " " "w " " "<" " " " " " " "BL" L" L" L" L"w L" L" L"\    =       -   ! ! ! ! !; ! ! !! ! ! ! !M ! ! !    -   5 5 5 5 5Y 5 5 5n' ' ' ' 'f ' ' '' ' ' ' ' ' ' 'Rt t t t t t t tl?) ?) ?) ?) ?) ?) ?) ?)B%/ %/ %/N, , ,*^$ ^$ ^$ ^$ ^$ ^$ ^$ ^$B #V"$$
 $.$4$4$6$6   I &**7RH==D+3tYC(((D"K/N7"LLNN  &!c+//&""="=x  F 
						     
w	-	-	w	.	.	w	-	-	w	-	-	w	.	.	vt	,	,	vu	-	-  _--    	w~	F	F	F	w	G	G	G	w~	F	F	F	w	G	G	G	vtn	E	E	E	vu~	F	F	F     $//    	w7G	H	H	H	w8H	I	I	I	w7G	H	H	H	w8H	I	I	I	vt6F	G	G	G	vu7G	H	H	H       
		%				   .//    	>	*	*	*	%.	1	1	1	n	-	-	-	N	+	+	+	      4 011    	+	,	,	,	%"2	3	3	3	.	/	/	/	,	-	-	-	! !    -..    															     GII	UWWDFF		 	r?   