o
    mi?                    @   s  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 deZ	G dd deZ
G d	d
 d
eZG dd deZG d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j0Z0eZ1eeB Z2eeB eB Z3ed eeiZ4e2eB eB eB eB eB Z5eeB eB eB eB eB e3B Z6e7ej8Z9e7ej:Z;e9e;B Z<e7ej=Z>e7ej?Z@e7de7dgB ZAe<e7dB ZBe<e7dB ZCdZDeE ZFeFd ZGdeG> d ZHeeeeeeeeeeeeeeedZIeeB ZJd ZKeeB ZLeeLB ZMd d ed eeeLeLiZNddddZOdZPG dd dZQeQ ZReSePT D ]\ZUZVeWeReVeU qVdLddZXd d! ZYd"d# ZZd$d% Z[d&d' Z\d(d) Z]d*d+ Z^d,d- Z_dMd/d0Z`d1d2 Zad3d4 Zbd5d6 Zcd7d8 Zdd9d: Zed;d< Zfd=d> Zgd?d@ ZhdAdBdCdDZidEdF ZjdGdH ZkdIdJ ZldKdL ZmdMdN ZndOdP ZodQdR ZpdSdT ZqdUdV ZrdWdX ZsdYdZ Ztd[d\ Zud]d^ Zvd_d` Zwdadb Zxdcdd Zydedf Zzdgdh Z{didj Z|dkdl Z}dmdn Z~dodp Zdqdr Zdsdt Zdudv Zdwdx Zdydz Zd{d| Zd}d~ ZdNddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZedT ZedT ZdOddZdd Zdd Zdd Zdd ZdZdZdZdZdZdZdZdddZeKdededeLdiZddń ZG ddǄ dǃZG ddɄ deZG dd˄ deZG dd̈́ deZG ddτ deZG ddф deZG ddӄ deZG ddՄ deZG ddׄ deZG ddل deZG ddۄ deZG dd݄ deZG dd߄ deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deăZG dd deZG dd deZG dd deZG dd deZG dd dZG dd deZG dd de˃ZG dd deZG dd deZG d d de˃ZG dd deZG dd deZG dd deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deكZG dd deكZG dd deكZG dd deكZG dd deZG d d! d!eZG d"d# d#e߃ZG d$d% d%eZG d&d' d'eZG d(d) d)eZG d*d+ d+eZG d,d- d-eZG d.d/ d/ZG d0d1 d1Zd2d3 Zd4d5 ZG d6d7 d7Ze Zi Ze D ]7\Z\ZZeedi f\ZZeeeed8Zeefee< e D ]\ZZeeedeed8ee< qqd9d:d;d<d=d>d?d@ZdZdZeddAdBeddAd.eddCdBeddDdBeddDd.eddEdBeddEd.dFZeeZeeddAdBedGeddAd.edGeddDdBedGeddDd.edGeddEdBedGeddEd.edGdH eeZ e eddAdBedGeddAd.edGeddDdBedGeddDd.edGeddEdBedGeddEd.edGdH e e ed.e΃ e eƃ eÃ eÃ dIZeeZeeedGed.edGeedGeedGdJ eeZeeedGed.edGeedGeedGdJ eeZee ed.e e dJ eǃ eǃ eԃ eރ dKZdS (P      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                   @   s   e Zd ZdZd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                 C   s   t |trdnd}|| _|| _|| _|d urB|d urB||d|d | _|||d| | _d	||}||v rB|d	| j| j7 }t
| | d S )N
   
r      z{} at position {}z (line {}, column {}))
isinstancestrmsgpatternposcountlinenorfindcolnoformat	Exception__init__)selfmessager/   r0   newline r;   K/home/kim/smarthome/.venv/lib/python3.10/site-packages/regex/_regex_core.pyr7   *   s   
zerror.__init__)NN)__name__
__module____qualname____doc__r7   r;   r;   r;   r<   r&      s    r&   c                   @      e Zd ZdS )_UnscopedFlagSetNr=   r>   r?   r;   r;   r;   r<   rB   =       rB   c                   @   rA   )
ParseErrorNrC   r;   r;   r;   r<   rE   A   rD   rE   c                   @   rA   )_FirstSetErrorNrC   r;   r;   r;   r<   rF   E   rD   rF   c                   @   s   e Zd Zd ZZd ZZd ZZd Z	Z
d ZZd ZZd ZZd ZZd	 ZZd
 ZZd ZZd ZZd ZZd ZZd ZZ d Z!Z"d Z#Z$dd Z%e&j'Z'dS )r(      i   i   i   i @           i   i          i       i   @   r+   c                 C   s   | j d ur
d| j  S | j}g }|dk }|r| }| jD ]}||j@ r0||j M }|d|j   q|r:|t| d|}|rQt|dkrMd| }|S d| }|S )Nzregex.%sr   |r+   z~(%s)z~%s)_name__value_	__class__appendhexjoinlen)r8   valuemembersnegativemresr;   r;   r<   __repr__]   s*   




zRegexFlag.__repr__N)(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   r\   object__str__r;   r;   r;   r<   r(   I   s(    
r(   z()|?*+{^$.[\# z -z &_-.)||~~&&--rJ   r+   )abefir   rZ   prsur   r    wxrH   rI   )rn   rl   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                   @   rA   )	NamespaceNrC   r;   r;   r;   r<   ro   )  rD   ro      c              	   C   s   t |  }t|| }|dk rdS || | }ddl}t|ds#dS |||D ]}	z| |	= W q) ty9   Y q)w |  i }
t | D ]&\}}}}}}|||||||f< z|||f |
||f< W qD tyj   Y qDw |  ||
 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keysrV   randomhasattrrq   KeyErrorclearupdate)Z
cache_dictZ	args_dictZlocale_sensitive
max_lengthZdivisorZ
cache_keysZoverageZnumber_to_tossrt   Z
doomed_keyZsensitivity_dictr/   Zpattern_typeflagsargsZdefault_versionlocaler;   r;   r<   _shrink_cache0  s2   

r}   c                 C   s(   | j }|t@ dkr|| jO }t||S )zFolds the case of a string.r   )rz   _ALL_ENCODINGSguess_encodingr   	fold_case)infostringrz   r;   r;   r<   
_fold_caseb  s   
r   c                 C   s   t t| j|dkS z$Checks whether a character is cased.r+   )rV   r   get_all_casesrz   )r   charr;   r;   r<   
is_cased_ij  s   r   c                 C   s   t t| |dkS r   )rV   r   r   )rz   r   r;   r;   r<   
is_cased_fn     r   c                 C   s6   t | jt@ }t| ||}|rt|trg S ||S )z&Compiles the firstset for the pattern.)boolrz   r   _check_firstsetr,   AnyAllcompile)r   fsreverser;   r;   r<   _compile_firstsetr  s
   
r   c                 C   s   |rd|v rdS t  }t}|D ]}t|tr|js dS ||jO }||jtd q|tt	B kr3dS t
| t||t @ dd}|j| |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   rX   r   rh   r;   r;   r<   r   |  s    
r   c                 C   s   g }| D ]}| | q|S )z(Flattens the code from a list of tuples.)extend)codeZ	flat_codecr;   r;   r<   _flatten_code  s   r   c                 C   s"   | j t@ }| j t@ r|t M }|S )zMakes the case flags.)rz   
CASE_FLAGSr   r   )r   rz   r;   r;   r<   make_case_flags  s   


r   Fc                 C   s   |rt |S t |t| dS )zMakes a character literal.r   )r   r   )r   rW   r   r;   r;   r<   make_character  s   r   c                 C   s   t | ||t| dS )zMakes a group reference.r   )RefGroupr   )r   namepositionr;   r;   r<   make_ref_group  r   r   c                 C   s   t | |t| dS )zMakes a string set.r   )	StringSetr   )r   r   r;   r;   r<   make_string_set     r   c                 C   s   |r|S |j t| dS )zMakes a property.r   )r   r   )r   propr   r;   r;   r<   make_property  s   r   c                 C   sL   t | |g}| dr|t | | | dst|dkr"|d S t|S )zParses a pattern, eg. 'a|b|c'.rO   r+   r   )parse_sequencematchrS   rV   Branch)sourcer   branchesr;   r;   r<   _parse_pattern  s   

r   c           	      C   sZ  dg}t |}	 | j}|  }|tv r|dv r|| _n|dkr+|t| |d n|dkrCt| |}|du r=t |}n|| n|dkrf|jt@ rS|t	  n|jt
@ r_|t  n|t  n|dkrs|t| | n|d	kr|jt@ r|jt
@ r|t  n|t  n|t  n|d
kr|jt@ r|jt
@ r|t  nv|t  no|jt
@ r|t  nc|t  n\|dv r
t| ||}|rt| |||||| |d n?t| |||}|rt|rt| ||||| |d n#|tt||d n|tt||d n|tt||d qdd |D }t|S )zParses a sequence, eg. 'abc'.NTz)|\F(.[^$z?*+{r   c                 S   s   g | ]}|d ur|qS Nr;   ).0itemr;   r;   r<   
<listcomp>!      z"parse_sequence.<locals>.<listcomp>)r   r0   getSPECIAL_CHARSrS   parse_escapeparse_parenrz   r   r   r#   AnyUAny	parse_setr   StartOfLineUStartOfLineStartOfString
EndOfLineU	EndOfLineEndOfStringLineUEndOfStringLineparse_quantifierapply_quantifierparse_fuzzyis_actually_fuzzyapply_constraintr   ordSequence)	r   r   sequencer   	saved_poschelementcountsconstraintsr;   r;   r<   r     sz   













Or   c                 C   s:   |  ddkr	dS |  d|  d|  dfdkrdS dS )	z4Checks whether a fuzzy constraint is actually fuzzy.rf   r   r   Frk   rh   d)r   r   r   T)r   )r   r;   r;   r<   r   $  s
    r   c                 C   s   |  }|d u r|rtd| j|td| j|t|tttfr'td| j||\}}	| j}|  }|dkr9t}
n|dkr@t}
n|| _t}
|	 sW|dksQ|	dkrW|
|||	}|
| d S )Nzmultiple repeatznothing to repeat?+r+   )popr&   r   r,   GreedyRepeat
LazyRepeatPossessiveRepeatr0   r   is_emptyrS   )r   r   r   r   r   r   r   r   	min_count	max_countZrepeatedr;   r;   r<   r   .  s&   r   c                 C   sX   |  }|d u rtd| j|t|tr"t|j||_|| d S |t|| d S )Nznothing for fuzzy constraint)r   r&   r   r,   GroupFuzzy
subpatternrS   )r   r   r   r   r   r   r   r;   r;   r<   r   N  s   
r   )r   r+   r   Nr+   N)r   *r   c                 C   s.   t |}|r	|S |dkrt| }|r|S dS )zParses a quantifier.{N)_QUANTIFIERSr   parse_limited_quantifier)r   r   r   qr   r;   r;   r<   r   ^  s   
r   c                 C   s   | duo| t kS )z,Checks whether a count is above the maximum.N	UNLIMITEDr1   r;   r;   r<   is_above_limitm  s   r   c                 C   s   | j }t| }| drt| }t|pd}|rt|nd}n|s&|| _ dS t| }}| ds6|| _ dS t|s>t|rEtd| j||durT||krTtd| j|||fS )zParses a limited quantifier.,r   N}zrepeat count too bigz"min repeat greater than max repeat)r0   parse_countr   intr   r&   r   )r   r   r   r   r;   r;   r<   r   q  s(   

r   c                 C   s   | j }|dkr	dS i }zt| | | dr t| | | dsW n ty.   || _ Y dS w | dr<t| |||d< | dsItd| j| j |S )z#Parses a fuzzy setting, if present.r   Nr   :testr   z
expected })r0   parse_fuzzy_itemr   rE   parse_fuzzy_testr&   r   )r   r   r   r   r   r   r;   r;   r<   r     s&   





r   c                 C   s<   | j }zt| | W dS  ty   || _ t| | Y dS w )zParses a fuzzy setting item.N)r0   parse_cost_constraintrE   parse_cost_equation)r   r   r   r;   r;   r<   r     s   r   c           
      C   s6  | j }|  }|tv r?t| ||}t| }|du rd||< dS | j }t| }|s,|d8 }|dk r7td| j|d|f||< dS |tv r|| _ | j }t| }t| }	|	du rXt	 t| ||  }t| }|du rkt	 | j }t| }|	sx|d7 }|s~|d8 }d|  kr|ksn td| j|||f||< dS t	 )zParses a cost constraint.Nr   r+   r   bad fuzzy cost limit)
r0   r   ALPHAparse_constraintparse_fuzzy_compareparse_cost_limitr&   r   DIGITSrE   )
r   r   r   r   
constraintmax_inccost_posmax_costZmin_costZmin_incr;   r;   r<   r     sF   r   c                 C   s:   | j }t| }zt|W S  ty   Y nw td| j|)zParses a cost limit.r   )r0   r   r   
ValueErrorr&   r   )r   r  digitsr;   r;   r<   r    s   
r  c                 C   s    |dvrt  ||v rt  |S )zParses a constraint.Zdeis)rE   )r   r   r   r;   r;   r<   r    s
   r  c                 C   s    |  drdS |  drdS dS )zParses a cost comparator.z<=T<FNr   r   r;   r;   r<   r    s
   

r  c                 C   s   d|v rt d| j| ji }t| | | dr"t| | | dst| }|du r-t tt| }|s9|d8 }|dk rEt d| j| j||d< ||d< dS )	zParses a cost equation.costzmore than one cost equationr   Nr+   r   r   max)	r&   r   r0   parse_cost_termr   r  rE   r   r   )r   r   r  r  r  r;   r;   r<   r     s"   



r   c                 C   sJ   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   rE   r&   r   r0   r   )r   r  coeffr   r;   r;   r<   r  (  s   r  c                 C   s   | j }|  }|tv r<|dkrt| |dS |dkr,|jt@ r!t S |jt@ r)t S t	 S |dkr5t
| |S td| j||rFtt||dS td| j|)Nr   Fr   r   zexpected character setr   )r0   r   r   r   rz   r   r   r#   r   r   r   r&   r   r   r   )r   r   r   r   r   r;   r;   r<   r   4  s"   


r   c                 C   s
   |  tS )z0Parses a quantifier's count, which can be empty.)	get_whiler  r  r;   r;   r<   r   N  s   
r   c              	   C   s  | j }| d}|dkr| j }| d}|dkrn| j }|  }|dv r,t| |d|dkS || _ t| }||}| d |j}zt| |}	| d W ||_t|jt	@ | _
n||_t|jt	@ | _
w |  t|||	S |dv r{t| |d|dkS |d	krt| |S |d
krt| S |dkrt| |S |dkrt| |S |dkrt| |S |dksd|  krdkrn nt| |||S |dkrt| ||S |dks|dkr|  tv rt| |||S || _ t| |S |dkr| j }| jtddd}
|
dd  rt|
}|std| j|| d |S || _ | }|j}zt| |}	| d W ||_t|jt	@ | _
n||_t|jt	@ | _
w |  t|||	S )z[Parses a parenthesised subpattern or a flag. Returns FLAGS if it's an
    inline flag.
    Tr   r  =!r  >)Fr   #r   rO   r   09&r   -r   )>includeNr+   zunknown verb)r0   r   parse_lookaround
parse_name
open_groupexpectrz   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_subpatternr  r   isalphaVERBSr&   r   )r   r   r   r   Zsaved_pos_2Zsaved_pos_3r   groupsaved_flagsr   wordZverbr;   r;   r<   r   R  s   








 




r   c              	   C   s  | j }|  }|dkrJt| }||}| d |j}zt| |}| d W ||_t|jt@ | _	n||_t|jt@ | _	w |
  t|||S |dkrkt| dd}| d ||retd| j|t|||S |dkss|dkryt| ||S || _ td	| j|)
zParses a Python extension.r  r  r  r  T)allow_numericcannot refer to an open groupr  unknown extension)r0   r   r"  r#  r$  rz   r   r   r%   r%  r&  r   is_open_groupr&   r   r   r-  )r   r   r   r   r   r3  r4  r   r;   r;   r<   r'    s8   




r'  c                 C   sH   	 | j }| d}|r|dkrn
|dkr| d}q|| _ | d dS )zParses a comment.Tr  r   N)r0   r   r$  )r   r   r   r;   r;   r<   r(    s   



r(  c              	   C   sZ   |j }zt| |}| d W ||_ t|j t@ | _n||_ t|j t@ | _w t|||S )zParses a lookaround.r  )rz   r   r$  r   r%   r%  
LookAround)r   r   behindr   r4  r   r;   r;   r<   r!    s   
r!  c              	   C   s"  |j }| j}|  }|dkr?|  }|dv rt| |d|dkS |dkr4|  }|dv r4t| |d|dkS || _td| j| j|| _z/t| d}| d t| |}| 	d	r]t| |}nt
 }| d W ||_ t|j t@ | _n||_ t|j t@ | _w | r| rt
 S t|||||S )
z Parses a conditional subpattern.r   r  Fr  r  Tzexpected lookaround conditionalr  rO   )rz   r0   r   parse_lookaround_conditionalr&   r   r"  r$  r   r   r   r   r%   r%  r   Conditional)r   r   r4  r   r   r3  
yes_branch	no_branchr;   r;   r<   r)    sB   




r)  c              	   C   s   |j }zt| |}| d W ||_ t|j t@ | _n||_ t|j t@ | _w t| |}| dr7t| |}nt }| d t	|||||S )Nr  rO   )
rz   r   r$  r   r%   r%  r   r   r   LookAroundConditional)r   r   r;  r   r4  r   r>  r?  r;   r;   r<   r<    s    




r<  c              	   C   sT   |j }zt| |}| d W ||_ t|j t@ | _t|S ||_ t|j t@ | _w )zParses an atomic subpattern.r  )rz   r   r$  r   r%   r%  Atomic)r   r   r4  r   r;   r;   r<   r*  .  s   
r*  c                 C   sz   |j }t| |g}|j }| dr'||_ |t| | t||j }| ds||_ | d t|dkr9|d S t|S )zParses a common groups branch.rO   r  r+   r   )group_countr   r   rS   r  r$  rV   r   )r   r   Zinitial_group_countr   Zfinal_group_countr;   r;   r<   r+  :  s   


r+  c                 C   s2   |dkrd}n||  t }| d t|||S )zParses a call to a group.r   r  r  )r  r  r$  	CallGroup)r   r   r   r0   r3  r;   r;   r<   r,  L  s
   
r,  c                 C   st   |  t}|std| j| jt|}|dkr|j| n|j| d }|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 numberr  )	r  r  r&   r   r0   r   rB  r$  rC  )r   r   r   r0   r
  offsetr3  r;   r;   r<   r/  W  s   
 
r/  c                 C   s   t | }| d t|||S )zParses a call to a named group.r  )r"  r$  rC  )r   r   r0   r3  r;   r;   r<   r-  f  s   
r-  c                 C   sR   d}z	 | j }|  }|dkr||  7 }|t| O }q ty(   || _ Y |S w )zParses a set of inline flags.r   TV)r0   r   REGEX_FLAGSrv   )r   rz   r   r   r;   r;   r<   parse_flag_setm  s   rG  c                 C   sJ   t | }| drt | }|std| j| jnd}|t@ r!d|_||fS )z!Parses flags being turned on/off.r  z$bad inline flags: no flags after '-'r   T)rG  r   r&   r   r0   r   inline_localer   r   flags_on	flags_offr;   r;   r<   parse_flags}  s   
rL  c              	   C   s   |j }|j |B | @ |_ |j ttB tB @ r|j t @ |B |_ t|j t@ | _zt| |}| 	d W ||_ t|j t@ | _|S ||_ t|j t@ | _w )z&Parses a subpattern with scoped flags.r  )
rz   r   r   r   r~   r   r%   r%  r   r$  )r   r   rJ  rK  r4  r   r;   r;   r<   parse_subpattern  s   
rM  c                 C   s   t | |\}}|t@ rtd| j| j||@ rtd| j| j||j @ t@ }|r5| j|O  _t|j|t M }| drFt| |||S | drTt	| ||| 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   r  Nr8  )
rL  GLOBAL_FLAGSr&   r   r0   global_flagsrB   r   rM  parse_positional_flags)r   r   rJ  rK  Znew_global_flagsr;   r;   r<   r0    s(   



r0  c                 C   s&   |j |B | @ |_ t|j t@ | _dS )zParses positional flags.N)rz   r   r%   r%  rI  r;   r;   r<   rP    s   rP  c                 C   sz   | j tddd}|std| j| j| r/|rdnd}|r%t||k r-td| j| j|S | s;td| j| j|S )zParses a name.r  Fr  zmissing group namer   r+   zbad character in group name)r  r   r&   r   r0   isdigitr   isidentifier)r   r6  Zallow_group_0r   Z	min_groupr;   r;   r<   r"    s   r"  c                 C      t dd | D S )z!Checks whether a string is octal.c                 s       | ]}|t v V  qd S r   )
OCT_DIGITSr   r   r;   r;   r<   	<genexpr>      zis_octal.<locals>.<genexpr>allr   r;   r;   r<   is_octal  r   r\  c                 C   rS  )z#Checks whether a string is decimal.c                 s   rT  r   )r  rV  r;   r;   r<   rW    rX  zis_decimal.<locals>.<genexpr>rY  r[  r;   r;   r<   
is_decimal  r   r]  c                 C   rS  )z'Checks whether a string is hexadecimal.c                 s   rT  r   )
HEX_DIGITSrV  r;   r;   r<   rW    rX  z!is_hexadecimal.<locals>.<genexpr>rY  r[  r;   r;   r<   is_hexadecimal  r   r_  c                 C   sH  | j }d| _ |  }|| _ |std| j| j|tv r&t| ||t| ||S |dkrJ|sJ| j}zt| |W S  tyA   || _Y nw t|t	||S |dkrS|sSt
 S |dkr^|s^t| |S |dkrht| ||S |dv rut| ||dk|S |d	kr|sg d
}|jtkr|g d tttddgt|dd |D gS |dkr|st S |tv r|s|jt@ rt|}n|jt@ rt|}n|jt@ rt|}nt|}|r|S |jt@ rt|}n|jt@ rt|}nt |}|r|S t!|}|rt"t	|S td| | j| j|t#v rt$| |||S t|t	||S )zParses an escape sequence.Fbad escape (end of pattern)gGr   NZpPri   r   )
            )   i(   i)   rg  rd  c                 S      g | ]}t |qS r;   r   r   r   r;   r;   r<   r     s    z parse_escape.<locals>.<listcomp>r$   bad escape \%s)%r%  r   r&   r   r0   HEX_ESCAPESparse_hex_escapeparse_group_refr   r   SearchAnchorparse_string_setparse_named_charparse_propertyr   r   r   rA  r   Stringr   Graphemer   rz   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   charsetrW   r;   r;   r<   r     st   












r   c           	      C   s   |s|dkrt | ||g|S |}| j}|  }|tv rN||7 }| j}|  }t|rN|tv rN|jt@ }|tks;|t	kr>d}nd}t
|| d|@ }t||S || _||r^td| j| jt||| jS )z!Parses a numeric escape sequence.r       rJ   r7  )parse_octal_escaper0   r   r  r\  rU  rz   r~   r   r   r   r   r9  r&   r   r   )	r   r   r   r   r
  r   encoding
octal_maskrW   r;   r;   r<   r~  ;  s(   


r~  c                 C   s   | j }|  }t|dk r'|tv r'|| | j }|  }t|dk r'|tv s|| _ ztd|d}t|||W S  ty_   |d tv rSt	dd| | j
| j t	d|d  | j
| j w )z Parses an octal escape sequence.   r_   rJ   r   zincomplete escape \%srl  )r0   r   rV   rU  rS   r   rU   r   r	  r&   r   )r   r   r
  r   r   r   rW   r;   r;   r<   r  \  s(   
r  c                 C   s   | j }g }t|D ]}|  }	|	tvr!td|d|f | j|||	 q	z
td|d}
W n	 t	y:   Y nw |
dk rEt
||
|S td|d|f | j|)zParses a hex escape sequence.incomplete escape \%s%sr_   rK   i   zbad hex escape \%s%s)r0   ranger   r^  r&   rU   r   rS   r   r	  r   )r   r   escexpected_lenr   typer   r
  rh   r   rW   r;   r;   r<   rn  q  s&   rn  c                 C   sJ   |  d | j}t| d}|  d ||rtd| j| jt|||S )zParses a group reference.r  Tr  r7  )r$  r0   r"  r9  r&   r   r   )r   r   r   r   r;   r;   r<   ro    s   



ro  c                 C   sJ   |  d t| d}|  d |du s||jvr td| j| jt||S )zParses a string set reference.r  Tr  Nzundefined named list)r$  r"  kwargsr&   r   r0   r   )r   r   r   r;   r;   r<   rq    s   



rq  c                 C   sz   | j }| dr2| jtdd}| dr2zt|}t|t||W S  ty1   t	d| j
| j w || _ t|td|S )zParses a named character.r   T)keep_spacesr   undefined character namerc  )r0   r   r  NAMED_CHAR_PARTunicodedatalookupr   r   rv   r&   r   )r   r   r   r   r   rW   r;   r;   r<   rr    s   


rr  c                 C   s   | j }|  }|dkr?| d}t| \}}| dr>|jt@ r#t}	n
|jt@ r+t}	nd}	t	||||k| |	d}
t
||
|S n'|rf|dv rf|jt@ rMt}	n
|jt@ rUt}	nd}	t	d||| |	d}
t
||
|S || _ |rmdnd	}t|t||S )
zParses a Unicode property.r   r   r   r   r  ZCLMNPSZNri   r   )r0   r   r   parse_property_namerz   r   ASCII_ENCODINGr   UNICODE_ENCODINGlookup_propertyr   r   r   )r   r   r   r   r   r   negate	prop_namer   r  r   r;   r;   r<   rs    s6   





rs  c                 C   sh   |  t}| j}|  }|r+|dv r+|}|  ttdB  }|r%| j}nd|}}nd}|| _||fS )z/Parses a property name, which may be qualified.z:=z &_-./N)r  PROPERTY_NAME_PARTr0   r   ALNUMr   strip)r   r   r   r   r  r;   r;   r<   r    s   
r  c                 C   s   |j t@ pt}| j}d| _| d}z!|tkrt| |}nt| |}| ds/td| j	| j
W || _n|| _w |rB|j|j d}|jt|d}|S )zParses a character set.Fr   ]	missing ]r   r   )rz   _ALL_VERSIONSDEFAULT_VERSIONr%  r   r   parse_set_imp_unionparse_set_unionr&   r   r0   r   r   r   )r   r   versionr  r  r   r;   r;   r<   r     s    


r   c                 C   N   t | |g}| dr|t | | | dst|dkr"|d S t||S )zParses a set union ([x||y]).r`   r+   r   )parse_set_symm_diffr   rS   rV   r   r   r   itemsr;   r;   r<   r       


r  c                 C   r  )z+Parses a set symmetric difference ([x~~y]).ra   r+   r   )parse_set_interr   rS   rV   
SetSymDiffr  r;   r;   r<   r    r  r  c                 C   r  )z#Parses a set intersection ([x&&y]).rb   r+   r   )parse_set_diffr   rS   rV   SetInterr  r;   r;   r<   r    r  r  c                 C   r  )z!Parses a set difference ([x--y]).rc   r+   r   )r  r   rS   rV   SetDiffr  r;   r;   r<   r    r  r  c                    s   |j t@ pt}t |g}	  j} dr| _n|tkr-t fddtD r-| _n	|	t | qt
|dkr@|d S t||S )z#Parses a set implicit union ([xy]).Tr  c                 3   s    | ]}  |V  qd S r   r  )r   opr  r;   r<   rW  5      z&parse_set_imp_union.<locals>.<genexpr>r+   r   )rz   r  r  parse_set_memberr0   r   r!   anySET_OPSrS   rV   r   )r   r   r  r  r   r;   r  r<   r  )  s   

r  c                 C   s   t | |}| j}t|tr|jr| ds|S |jt@ pt}| j}|t	kr/| dr/|| _|S | drB|| _t
||ttdgS t | |}t|trO|js[t
||ttd|gS |j|jkritd| j| j|j|jkrq|S t|j|jS )z#Parses a member in a character set.r  r  zbad character range)parse_set_itemr0   r,   r   r   r   rz   r  r  r!   r   r   rW   r&   r   Range)r   r   startZ
saved_pos1r  Z
saved_pos2endr;   r;   r<   r  @  s,   


r  c                 C   s   |j t@ pt}| drt| |dS | j}| dr-zt| |W S  ty,   || _Y nw |tkrY| drY| d}t	| |}| dsMt
d| j| j|rW|j|j d}|S |  }|sgt
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)rz   r  r  r   r   r0   parse_posix_classrE   r!   r  r&   r   r   r   r   r   r   )r   r   r  r   r  r   r   r;   r;   r<   r  i  s,   





r  c                 C   s:   |  d}t| \}}|  dst t||| | ddS )zParses a POSIX character class.r   z:]T)posix)r   r  rE   r  )r   r   r  r  r   r;   r;   r<   r    s
   

r  c                 C   sD   t | }| | }t|dk r|dfS td| \}}|| | |fS )z$Converts a float to a rational pair.g-C6?r+   g      ?)r   absfloat_to_rational)ZfltZint_partr&   dennumr;   r;   r<   r    s   r  c                 C   s   | dd dkr| d | dd }} nd}|  d}t|dkr2tt|d t|d  \}}nt|dkrCtt|d \}}nt d|||}|d	rX|dd
 S |S )z<Converts a numeric string to a rational string, if possible.Nr+   r  r   r_   /rH   z{}{}/{}z/1)splitrV   r  floatr	  r5   endswith)numericsignpartsr  r  resultr;   r;   r<   numeric_to_rational  s   
"
r  c              	   C   s@   zt d| W S  ttfy   ddd | D   Y S w )z&Standardises a property or value name.r_   c                 s   s    | ]	}|d vr|V  qdS )z_- Nr;   rV  r;   r;   r<   rW        z#standardise_name.<locals>.<genexpr>)r  rU   r	  ZeroDivisionErrorupper)r   r;   r;   r<   standardise_name  s
   r  zALNUM DIGIT PUNCT XDIGITzYES Y NO N TRUE T FALSE Fc                 C   s  | rt | nd} t |}| |fdkrdd| } }}|r)| s)| tv r)d| }| rft| }|s@|s8tdtd|j|j|\}}||}	|	du r[|sStdtd|j|jt|d> |	B ||d	S d
D ]} t| \}}||}	|	durt|d> |	B ||d	  S qht|}|r|\}}t	|t
krt|d> dB ||d	S t|d> | |d	S |drt|dd }|r|\}}d|v rt|d> dB ||d	S dD ]*\}
} ||
rt| \}}||dd }	|	durt|d> |	B ||d	  S q|stdtd|j|j)zLooks up a property.N)GENERALCATEGORYZASSIGNEDr  Z
UNASSIGNEDr   zunknown propertyzunknown property valuerK   r  )ZGCSCRIPTBLOCKr+   ISrH   YES))r  r  )INr  )r  r  _POSIX_CLASSES
PROPERTIESr   r&   r   r0   Propertyr   _BINARY_VALUES
startswith)propertyrW   r   r   r  r  r   prop_idZ
value_dictval_idprefixr;   r;   r<   r    s^   





r  c                 C   s  |   }|tv rTt |}|rdt|gfS |tv r+|dks |r+dt| t| |gfS |dkr7dt| |gfS |dkrJ|rJt| }|durJd|gfS td| | j	| j
t| jtr]d}nd	}|d
kr|}t|dk r| j
}|   }|tvrz|| _
n
||7 }t|dk skdt|d|@ gfS |tv r|}| j
}|   }|tv r||7 }| j
}|   }|rt|| rdt|| d|@ gfS || _
dt|gfS |dkrdtdgfS |std| j	| j
dtdt|gfS )z0Compiles a replacement template escape sequence.Frn   ra  Trc  Nrl  r  r  r  r  rJ   r   r`  )r   r   r}  r   rm  parse_repl_hex_escapecompile_repl_groupparse_repl_named_charr&   r   r0   r,   sepbytesrV   rU  r   r  r\  )r   r/   Z
is_unicoder   rW   r  r
  r   r;   r;   r<   _compile_replacement	  sZ   

r  c                 C   sZ   g }t |D ]}|  }|tvrtd|d|f | j| j|| qtd|dS )z5Parses a hex escape sequence in a replacement string.r  r_   rK   )	r  r   r^  r&   rU   r   r0   rS   r   )r   r  r  r
  rh   r   r;   r;   r<   r  Q  s   r  c                 C   sj   | j }| dr0| ttdB }| dr0z
t|}t|W S  ty/   t	d| j
| j w || _ dS )z1Parses a named character in a replacement string.r    r   r  N)r0   r   r  r   r   r  r  r   rv   r&   r   )r   r   r   rW   r;   r;   r<   r  ]  s   



r  c                 C   s   |  d t| dd}|  d | r.t|}d|  kr#|jks,n td| j| j|S z|j| W S  t	y?   t
dw )z0Compiles a replacement template group reference.r  Tr  r   invalid group referenceunknown group)r$  r"  rQ  r   groupsr&   r   r0   
groupindexrv   
IndexError)r   r/   r   indexr;   r;   r<   r  n  s   

r  z  rK   z	NON-MATCHZMATCHFTz SIMPLE_IGNORE_CASEz FULL_IGNORE_CASEc                 C   s   t | dkr
| d S t| S Nr+   r   )rV   r   r  r;   r;   r<   make_sequence  s   r  c                   @   s   e Zd Zdd Zd%ddZdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zd&ddZdd Zdd Zdd  Zd!d" Zd#d$ ZdS )'	RegexBasec                 C   s   | j | _d S r   )rR   _keyr8   r;   r;   r<   r7        zRegexBase.__init__Nc                 C   s|   |d u r| j }nt|}|d u r| j}nt|t@  }|d u r"| j}nt|}|| j kr7|| jkr7|| jkr7| S | |||S r   )r   r   r   CASE_FLAGS_COMBINATIONSr   r   rebuildr8   r   r   r   r;   r;   r<   r     s   
zRegexBase.with_flagsc                 C   s   d S r   r;   r8   r/   r   fuzzyr;   r;   r<   
fix_groups     zRegexBase.fix_groupsc                 C      | S r   r;   r8   r   r   r;   r;   r<   r     r  zRegexBase.optimisec                 C   r  r   r;   r8   r   r;   r;   r<   pack_characters  r  zRegexBase.pack_charactersc                 C   r  r   r;   r  r;   r;   r<   remove_captures  r  zRegexBase.remove_capturesc                 C      dS NTr;   r  r;   r;   r<   	is_atomic  r  zRegexBase.is_atomicc                 C   r  r  r;   r  r;   r;   r<   can_be_affix  r  zRegexBase.can_be_affixc                 C   r  NFr;   r  r;   r;   r<   contains_group  r  zRegexBase.contains_groupc                 C   s   t  r   )rF   r8   r   r;   r;   r<   get_firstset  s   zRegexBase.get_firstsetc                 C   r  r  r;   r  r;   r;   r<   has_simple_start  r  zRegexBase.has_simple_startFc                 C   s   |  ||S r   )_compiler8   r   r  r;   r;   r<   r     r  zRegexBase.compilec                 C   r  r  r;   r  r;   r;   r<   r     r  zRegexBase.is_emptyc                 C   
   t | jS r   )hashr  r  r;   r;   r<   __hash__     
zRegexBase.__hash__c                 C      t | t |u o| j|jkS r   )r  r  r8   otherr;   r;   r<   __eq__     zRegexBase.__eq__c                 C   s   |  | S r   )r  r  r;   r;   r<   __ne__  r  zRegexBase.__ne__c                 C      |   d fS r   	max_widthr  r;   r;   r<   get_required_string  r  zRegexBase.get_required_string)NNNFF)r=   r>   r?   r7   r   r  r   r  r  r  r  r   r  r  r   r   r  r  r  r  r;   r;   r;   r<   r    s$    

r  c                   @   s6   e Zd ZdddZdd Zdd Zd	d
 Zdd ZdS )ZeroWidthBaseTr   c                 C   s,   t |  t|| _|| _| j| jf| _d S r   )r  r7   r   r   r  rR   r  )r8   r   r  r;   r;   r<   r7     s   

zZeroWidthBase.__init__c                 C   s
   t d gS r   r   r  r;   r;   r<   r    r	  zZeroWidthBase.get_firstsetc                 C   sD   d}| j r	|tO }|r|tO }|r|tO }|| jt> O }| j|fgS Nr   )r   POSITIVE_OPFUZZY_OP
REVERSE_OPr  ENCODING_OP_SHIFT_opcoder8   r   r  rz   r;   r;   r<   r    s   zZeroWidthBase._compilec                 C   s.   t dt| | jt| j ddg| j  d S )N	{}{} {}{}r_    ASCII)printr5   INDENT_op_namePOS_TEXTr   r  r8   indentr   r;   r;   r<   dump  s   
zZeroWidthBase.dumpc                 C   r  r  r;   r  r;   r;   r<   r    r  zZeroWidthBase.max_widthN)Tr   )r=   r>   r?   r7   r  r  r&  r  r;   r;   r;   r<   r    s    
r  c                   @   s>   e Zd ZejejdZdZdd Zdd Z	dd Z
d	d
 ZdS )r   r  ANYc                 C   r  r  r;   r  r;   r;   r<   r    r  zAny.has_simple_startc                 C   s    d}|r|t O }| j| |fgS r  )r  r  r  r;   r;   r<   r    s   zAny._compilec                 C      t dt| | j d S )N{}{})r   r5   r!  r"  r$  r;   r;   r<   r&       zAny.dumpc                 C   r  Nr+   r;   r  r;   r;   r<   r    r  zAny.max_widthN)r=   r>   r?   OPr'  ZANY_REVr  r"  r  r  r&  r  r;   r;   r;   r<   r     s    r   c                   @   s&   e Zd ZejejdZdZdd ZdS )r   r  ANY_ALLc                 C   s$   d| _ d| _d| _| j| j f| _d S )NTFr   )r   r   r   rR   r  r  r;   r;   r<   r7     s   zAnyAll.__init__N)	r=   r>   r?   r,  r-  ZANY_ALL_REVr  r"  r7   r;   r;   r;   r<   r     s    r   c                   @   s   e Zd ZejejdZdZdS )r   r  ANY_UN)r=   r>   r?   r,  r.  Z	ANY_U_REVr  r"  r;   r;   r;   r<   r     s    r   c                   @      e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) rA  c                 C      t |  || _d S r   )r  r7   r   )r8   r   r;   r;   r<   r7        

zAtomic.__init__c                 C      | j ||| d S r   r   r  r  r;   r;   r<   r       zAtomic.fix_groupsc                 C   s$   | j ||| _ | j  r| j S | S r   )r   r   r   r  r;   r;   r<   r   "  s   
zAtomic.optimisec                 C      | j || _ | S r   r   r  r  r;   r;   r<   r  )     zAtomic.pack_charactersc                 C      | j  | _ | S r   r   r  r  r;   r;   r<   r  -     zAtomic.remove_capturesc                 C   
   | j  S r   r   r  r  r;   r;   r<   r  1  r	  zAtomic.can_be_affixc                 C   r;  r   r   r   r  r;   r;   r<   r   4  r	  zAtomic.contains_groupc                 C      | j |S r   r   r  r  r;   r;   r<   r  7  r  zAtomic.get_firstsetc                 C   r;  r   r   r  r  r;   r;   r<   r  :  r	  zAtomic.has_simple_startc                 C   s"   t jfg| j|| t jfg S r   )r,  ATOMICr   r   ENDr  r;   r;   r<   r  =  s   zAtomic._compilec                 C   s(   t dt|  | j|d | d S )N{}ATOMICr+   )r   r5   r!  r   r&  r$  r;   r;   r<   r&  A  s   zAtomic.dumpc                 C   r;  r   r   r   r  r;   r;   r<   r   E  r	  zAtomic.is_emptyc                 C   r
  r   )r  r   r  r;   r;   r<   r  H  s   zAtomic.__eq__c                 C   r;  r   r   r  r  r;   r;   r<   r  L  r	  zAtomic.max_widthc                 C   r>  r   r   r  r  r;   r;   r<   r  O  r  zAtomic.get_required_stringN)r=   r>   r?   r7   r  r   r  r  r  r   r  r  r  r&  r   r  r  r  r;   r;   r;   r<   rA    s     rA  c                   @      e Zd ZejZdZdS )BoundaryBOUNDARYN)r=   r>   r?   r,  rI  r  r"  r;   r;   r;   r<   rH  R      rH  c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zedd Zedd Zedd Zedd  Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zd1d2 Zd3d4 Zd5d6 Zd7S )8r   c                 C   r0  r   )r  r7   r   )r8   r   r;   r;   r<   r7   W  r1  zBranch.__init__c                 C      | j D ]	}|||| qd S r   )r   r  )r8   r/   r   r  re   r;   r;   r<   r  [     
zBranch.fix_groupsc                 C   s   | j stg S t||| j }|rt||\}}g }n
t||\}}g }t|||}t|dkrTt|g}|r<|sS| |||}|rS|rM|	| n	|
d| n|}t|| | S r  )r   r   r   _flatten_branches_split_common_suffix_split_common_prefix_reduce_to_setrV   _add_precheckrS   insertr  )r8   r   r   r   suffixr  r   Zfirstsetr;   r;   r<   r   _  s(   
zBranch.optimisec                 C   sf   t  }|rdnd}|D ]}t|tu r!|jtkr!||j|  q d S |s(d S t||dd |D S )Nr   c                 S   ri  r;   rj  rk  r;   r;   r<   r         z(Branch._add_precheck.<locals>.<listcomp>)r   r  Literalr   r   r   
charactersr   )r8   r   r   r   r  r0   branchr;   r;   r<   rQ    s   zBranch._add_precheckc                    s    fdd| j D | _ | S )Nc                    s   g | ]}|  qS r;   )r  r   re   r   r;   r<   r     s    z*Branch.pack_characters.<locals>.<listcomp>r   r  r;   rZ  r<   r    s   zBranch.pack_charactersc                 C      dd | j D | _ | S )Nc                 S      g | ]}|  qS r;   r  rY  r;   r;   r<   r     rU  z*Branch.remove_captures.<locals>.<listcomp>r[  r  r;   r;   r<   r       zBranch.remove_capturesc                 C      t dd | jD S )Nc                 s       | ]}|  V  qd S r   r  rY  r;   r;   r<   rW    rX  z#Branch.is_atomic.<locals>.<genexpr>rZ  r   r  r;   r;   r<   r    r4  zBranch.is_atomicc                 C   r`  )Nc                 s   ra  r   )r  rY  r;   r;   r<   rW    rX  z&Branch.can_be_affix.<locals>.<genexpr>rc  r  r;   r;   r<   r    r4  zBranch.can_be_affixc                 C   r`  )Nc                 s   ra  r   r   rY  r;   r;   r<   rW    rX  z(Branch.contains_group.<locals>.<genexpr>)r  r   r  r;   r;   r<   r     r4  zBranch.contains_groupc                 C   s.   t  }| jD ]	}|||O }q|pt d gS r   )r   r   r  )r8   r   r   re   r;   r;   r<   r    s   
zBranch.get_firstsetc                 C   sP   | j sg S tjfg}| j D ]}|||| |tjf qtjf|d< |S NrT  )r   r,  BRANCHr   r   rS   NEXTrB  )r8   r   r  r   re   r;   r;   r<   r    s   

zBranch._compilec                 C   sb   t dt|  | jd |d | | jdd  D ]}t dt|  ||d | qd S )Nz{}BRANCHr   r+   {}OR)r   r5   r!  r   r&  )r8   r%  r   re   r;   r;   r<   r&    s   zBranch.dumpc                 C   s@   g }|D ]}| | |}t|tr||j q|| q|S r   )r   r,   r   r   r   rS   )r   r   r   new_branchesre   r;   r;   r<   rM    s   
zBranch._flatten_branchesc                    sN  g }|D ]}t |tr||j q||g qtdd |D }|d d|}|k rZ  rZtfdd|D rZd7 |k rZ  rZtfdd|D s@ | jt@ r  dkrt fdd|D s d8   dkrt fdd|D rr dkrg |fS g }|D ]}|t	| d   qd   |fS )Nc                 s       | ]}t |V  qd S r   rV   r   rd   r;   r;   r<   rW    rX  z.Branch._split_common_prefix.<locals>.<genexpr>r   c                 3        | ]}|    kV  qd S r   r;   rl  )r0   r  r;   r<   rW        r+   c                 3       | ]	}t | V  qd S r   )r   
_can_splitrl  r   r;   r<   rW    r  
r,   r   rS   r  minr  rZ  rz   r   r  r   r   Zalternativesre   r   end_posri  rd   r;   )r1   r0   r  r<   rO    s@   
""
zBranch._split_common_prefixc                    sV  g }|D ]}t |tr||j q||g qtdd |D }|d dd| }|kr\  r\tfdd|D r\d8 |kr\  r\tfdd|D sBd  | jt@ r dkrt fdd|D s d8   dkrt fdd|D rt dkrg |fS g }|D ]}|t	|d     q  d  |fS )Nc                 s   rj  r   rk  rl  r;   r;   r<   rW   	  rX  z.Branch._split_common_suffix.<locals>.<genexpr>r   rT  c                 3   rm  r   r;   rl  )r0   rS  r;   r<   rW  	  rn  r+   c                 3   ro  r   )r   _can_split_revrl  r   r;   r<   rW  	  r  rq  rs  r;   )r1   r0   rS  r<   rN    s>   
""
zBranch._split_common_suffixc                 C   s   t | |d s
dS t | |sdS t | |d |d  r!dS t | |d r8t | |d |d  r8dS t | |d rOt | |d |d  rOdS dS )Nr+   TFrH   )r   _is_full_case
_is_folded)r  r1   r;   r;   r<   rp  	  s   zBranch._can_splitc                 C   s   t | }t| || sdS t| || d sdS t| || d || d  r-dS t| || d rJt| || d || d  rJdS t| || d rgt| || d || d  rgdS dS )NTr+   FrH   )rV   r   rv  rw  )r  r1   r  r;   r;   r<   ru  6	  s    "  zBranch._can_split_revc                 C   s   t t}i }g }|D ]Q}t|r$||j |g ||jt| q
t|t	rM|j
rMt|j
d rM||j
d j |j
 ||j
d jt| q
t| |||| || q
t| ||| |S r  )r   r   r   _is_simple_characterrW   rS   
setdefaultrV   r,   r   r  _flush_char_prefix)r   r   r   prefixedorderri  re   r;   r;   r<   _merge_common_prefixesQ	  s$   
zBranch._merge_common_prefixesc                 C   s   t | to| jo| j S r   )r,   r   r   r   r   r;   r;   r<   rx  m	  s   zBranch._is_simple_characterc                 C   s   g }t  }t}|D ]3}t|tttfr.|j|kr$t| |||| |j}|	|j
td q	t| |||| || q	t| |||| |S )Nr   )r   r   r,   r   r  SetBaser   r   _flush_set_membersr   r   rS   )r   r   r   ri  r  r   re   r;   r;   r<   rP  q	  s&   
zBranch._reduce_to_setc                    s   |sd S t |  fdddD ]L\}}t|dkr$|t|d  qg }d}|D ]}	t|	dkr>|t|	dd   q*|sH|t  d}q*tt|t|g}
||
| | q|	   	  d S )Nc                    s    | d  S r  r;   )pairr|  r;   r<   <lambda>	  r  z+Branch._flush_char_prefix.<locals>.<lambda>keyr+   r   FT)
sortedr  rV   rS   r  r   r   r   r   rw   )r   r   r{  r|  ri  rW   r   Zsubbranchesoptionalre   r   r;   r  r<   rz  	  s$    zBranch._flush_char_prefixc                 C   sV   |sd S t |dkrt|d }nt| t|| |}||j|d |  d S )Nr+   r   r   )rV   r   r   r   rS   r   rw   )r   r   r  r   ri  r   r;   r;   r<   r  	  s   zBranch._flush_set_membersc                 C   sF   d|  krt | k sdS  dS | | }t|to"|jo"|jt@ tkS )Nr   F)rV   r,   r   r   r   FULLIGNORECASE)r  rh   r   r;   r;   r<   rv  	  s   zBranch._is_full_casec                 C   s   t | dk rdS | D ]}t|tr|jr|js dS q
ddd | D }tt|}t	 }|D ]}|tt|kr> dS q1dS )NrH   Fr_   c                 s   s    | ]}t |jV  qd S r   )chrrW   r   rh   r;   r;   r<   rW  	  r  z$Branch._is_folded.<locals>.<genexpr>T)
rV   r,   r   r   r   rU   r   r   FULL_CASE_FOLDINGget_expand_on_folding)r  rh   foldedexpanding_charsr   r;   r;   r<   rw  	  s    zBranch._is_foldedc                 C   r`  )Nc                 s   ra  r   r   rY  r;   r;   r<   rW  	  rX  z"Branch.is_empty.<locals>.<genexpr>rc  r  r;   r;   r<   r   	  r4  zBranch.is_emptyc                 C   r
  r   )r  r   r  r;   r;   r<   r  	  r  zBranch.__eq__c                 C   r`  )Nc                 s   ra  r   r  rY  r;   r;   r<   rW  	  rX  z#Branch.max_width.<locals>.<genexpr>)r  r   r  r;   r;   r<   r  	  r4  zBranch.max_widthN)r=   r>   r?   r7   r  r   rQ  r  r  r  r  r   r  r  r&  staticmethodrM  rO  rN  rp  ru  r}  rx  rP  rz  r  rv  rw  r   r  r  r;   r;   r;   r<   r   V  sP    #

)
(








r   c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )rC  c                 C   s.   t |  || _|| _|| _| j| jf| _d S r   )r  r7   r   r3  r   rR   r  )r8   r   r3  r   r;   r;   r<   r7   	  s
   
zCallGroup.__init__c                 C   s   zt | j| _W n" ty*   z
| jj| j | _W n ty'   td|| jw Y nw d| j  kr8| jjks@n td|| j| jdkrU| jj	| j dkrUtd|| j| jj
| ||f | j| jf| _d S )Nr  r   r  r+   zambiguous group reference)r   r3  r	  r   group_indexrv   r&   r   rB  open_group_countgroup_callsrS   rR   r  r  r;   r;   r<   r  	  s    zCallGroup.fix_groupsc                 C      t d| j| jNzgroup reference not allowedr&   r/   r   r  r;   r;   r<   r  	     zCallGroup.remove_capturesc                 C   s   t j| jfgS r   )r,  Z
GROUP_CALLcall_refr  r;   r;   r<   r  	     zCallGroup._compilec                 C   r(  )Nz{}GROUP_CALL {})r   r5   r!  r3  r$  r;   r;   r<   r&   
  r*  zCallGroup.dumpc                 C   r
  r   )r  r3  r  r;   r;   r<   r  
  r  zCallGroup.__eq__c                 C      t S r   r   r  r;   r;   r<   r  
  r  zCallGroup.max_widthc                 C   
   d | _ d S r   rZ  r  r;   r;   r<   __del__	
  r	  zCallGroup.__del__N)r=   r>   r?   r7   r  r  r  r&  r  r  r  r;   r;   r;   r<   rC  	  s    rC  c                   @      e Zd Zdd Zdd ZdS )CallRefc                 C   s   || _ || _d S r   )refparsed)r8   r  r  r;   r;   r<   r7   
  s   
zCallRef.__init__c                 C   s&   t j| jfg| j|| t jfg S r   )r,  CALL_REFr  r  r  rB  r  r;   r;   r<   r  
  s
   zCallRef._compileNr=   r>   r?   r7   r  r;   r;   r;   r<   r  
  s    r  c                   @   s   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dZdd ZdddZd	d
 Zdd Zdd Zdd Zdd Zdd Zdd ZdS )r   FTc                 C   s   t |  || _t|| _t| | _t|| _| jr,| jt@ tkr,t	
tt| j| _nt| j| _| j| j| j| j| jf| _d S r   )r  r7   rW   r   r   r  r   r   r  r   r   r  r  r  rR   r  )r8   rW   r   r   r   r;   r;   r<   r7   
  s   




zCharacter.__init__c                 C   s   t | j|||S r   )r   rW   r  r;   r;   r<   r  -
  r  zCharacter.rebuildc                 C   r  r   r;   r8   r   r   r   r;   r;   r<   r   0
  r  zCharacter.optimisec                 C   
   t | gS r   r  r  r;   r;   r<   r  3
  r	  zCharacter.get_firstsetc                 C   r  r  r;   r  r;   r;   r<   r  6
  r  zCharacter.has_simple_startc                 C   s   d}| j r	|tO }| jr|tO }|r|tO }t| j| j|f || jg}t	| j
dkr<t|tdd | j
D | jdg}|||S )Nr   r+   c                 S   ri  r;   r   rk  r;   r;   r<   r   G
  rU  z&Character._compile.<locals>.<listcomp>r   )r   r  r   ZEROWIDTH_OPr  PrecompiledCoder  r   rW   rV   r  r   rt  r   )r8   r   r  rz   r   r;   r;   r<   r  9
  s   
zCharacter._compilec                 C   s<   t t| jd}tdt| t| j |t	| j
  d S )Nbuz{}CHARACTER {} {}{})asciir  rW   lstripr   r5   r!  r#  r   	CASE_TEXTr   r8   r%  r   displayr;   r;   r<   r&  L
  s   
zCharacter.dumpc                 C   s   || j k| jkS r   )rW   r   r8   r   r;   r;   r<   matchesQ
  r  zCharacter.matchesc                 C   r  r   )rV   r  r  r;   r;   r<   r  T
  r	  zCharacter.max_widthc                 C   s(   | j sdS tdd | jD | _d| fS )Nr   c                 s   rj  r   r  rk  r;   r;   r<   rW  [
  rX  z0Character.get_required_string.<locals>.<genexpr>r   )r   rr   r  folded_charactersr  r;   r;   r<   r  W
  s   zCharacter.get_required_stringNF)r=   r>   r?   r   r,  	CHARACTERr   ZCHARACTER_IGNr   r  ZCHARACTER_REVZCHARACTER_IGN_REVr  r7   r  r   r  r  r  r&  r  r  r  r;   r;   r;   r<   r   
  s.    


r   c                   @   r/  ) r=  c                 C   s,   t |  || _|| _|| _|| _|| _d S r   )r  r7   r   r3  yes_itemno_itemr   )r8   r   r3  r  r  r   r;   r;   r<   r7   `
  s   

zConditional.__init__c                 C   s   zt | j| _W n- ty5   z
| jj| j | _W n ty2   | jdkr)d| _ntd|| jY nw Y nw d| j  krC| jjksKn td|| j| j	
||| | j
||| d S )NZDEFINEr   r  r  )r   r3  r	  r   r  rv   r&   r   rB  r  r  r  r  r;   r;   r<   r  h
  s"   
zConditional.fix_groupsc                 C   s0   | j ||}| j||}t|| j||| jS r   )r  r   r  r=  r3  r   )r8   r   r   r  r  r;   r;   r<   r   |
  s   zConditional.optimisec                 C   s    | j || _ | j|| _| S r   )r  r  r  r  r;   r;   r<   r  
  s   zConditional.pack_charactersc                 C   s   | j  | _ | j | _d S r   )r  r  r  r  r;   r;   r<   r  
  s   zConditional.remove_capturesc                 C      | j  o	| j S r   )r  r  r  r  r;   r;   r<   r  
  r4  zConditional.is_atomicc                 C   r  r   )r  r  r  r  r;   r;   r<   r  
  r4  zConditional.can_be_affixc                 C   s   | j  p	| j S r   )r  r   r  r  r;   r;   r<   r   
  r4  zConditional.contains_groupc                 C   s   | j || j|B S r   )r  r  r  r  r;   r;   r<   r  
  s   

zConditional.get_firstsetc                 C   s^   t j| jfg}|| j|| | j||}|r&|t jf || |t j	f |S r   )
r,  ZGROUP_EXISTSr3  r   r  r   r  rS   rg  rB  r8   r   r  r   Zadd_coder;   r;   r<   r  
  s   
zConditional._compilec                 C   s^   t dt| | j | j|d | | j s-t dt|  | j|d | d S d S )Nz{}GROUP_EXISTS {}r+   rh  )r   r5   r!  r3  r  r&  r  r   r$  r;   r;   r<   r&  
  s   
zConditional.dumpc                 C   r  r   )r  r   r  r  r;   r;   r<   r   
  r4  zConditional.is_emptyc                 C   0   t | t |u o| j| j| jf|j|j|jfkS r   )r  r3  r  r  r  r;   r;   r<   r  
  
   zConditional.__eq__c                 C      t | j | j S r   r  r  r  r  r  r;   r;   r<   r  
     zConditional.max_widthc                 C   r  r   rZ  r  r;   r;   r<   r  
  r	  zConditional.__del__N)r=   r>   r?   r7   r  r   r  r  r  r  r   r  r  r&  r   r  r  r  r;   r;   r;   r<   r=  _
  s     r=  c                   @   rG  )DefaultBoundaryDEFAULT_BOUNDARYN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r  
  rJ  r  c                   @   rG  )DefaultEndOfWordDEFAULT_END_OF_WORDN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r  
  rJ  r  c                   @   rG  )DefaultStartOfWordDEFAULT_START_OF_WORDN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r  
  rJ  r  c                   @   rG  )r   END_OF_LINEN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r   
  rJ  r   c                   @   rG  )r   END_OF_LINE_UN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r   
  rJ  r   c                   @   rG  )EndOfStringEND_OF_STRINGN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r  
  rJ  r  c                   @   rG  )r   END_OF_STRING_LINEN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r   
  rJ  r   c                   @   rG  )r   END_OF_STRING_LINE_UN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r   
  rJ  r   c                   @   rG  )	EndOfWordEND_OF_WORDN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r  
  rJ  r  c                   @      e Zd ZdZdd ZdS )FailureFAILUREc                 C   
   t jfgS r   )r,  r  r  r;   r;   r<   r  
  r	  zFailure._compileNr=   r>   r?   r"  r  r;   r;   r;   r<   r  
      r  c                   @   sn   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )r   Nc                 C   s   t |  |d u ri }|| _|| _d|v r&dD ]}||d v r%||d qt|td@ r:dD ]}||d q0ndD ]}||d q<|dd d|v r^dD ]
}|d |d qQd S ddd|d d d|d< d S )	Nr  r  r   r   rf   r   r+   )r   rh   rk   r  )r  r7   r   r   ry  r   )r8   r   r   rf   r;   r;   r<   r7   
  s0   

zFuzzy.__init__c                 C   s   | j ||d d S r  r3  r  r;   r;   r<   r    r4  zFuzzy.fix_groupsc                 C   r5  r   r6  r  r;   r;   r<   r  	  r7  zFuzzy.pack_charactersc                 C   r8  r   r9  r  r;   r;   r<   r    r:  zFuzzy.remove_capturesc                 C   r;  r   r   r  r  r;   r;   r<   r    r	  zFuzzy.is_atomicc                 C   r;  r   r=  r  r;   r;   r<   r     r	  zFuzzy.contains_groupc                 C   s  g }dD ]}| j | }||d  ||d d u rtn|d  qdD ]}|| j d |  q$| j d d }||d u r@tn| d}|rK|tO }| j d}|rttj|ft| g||d tj	fg | j
|d tjfg S tj|ft| g| j
|d tjfg S )	NZdiser   r+   r  r  r  r   T)r   rS   r   r  r   r,  Z	FUZZY_EXTrr   r   rg  r   rB  ZFUZZY)r8   r   r  	argumentsrf   vrz   r   r;   r;   r<   r    s8   
 
zFuzzy._compilec                 C   s>   |   }|r
d| }tdt| | | j|d | d S )Nr  z	{}FUZZY{}r+   )_constraints_to_stringr   r5   r!  r   r&  )r8   r%  r   r   r;   r;   r<   r&  5  s
   z
Fuzzy.dumpc                 C   r;  r   rD  r  r;   r;   r<   r   <  r	  zFuzzy.is_emptyc                 C   s(   t | t |u o| j|jko| j|jkS r   )r  r   r   r  r;   r;   r<   r  ?  s
   
zFuzzy.__eq__c                 C   r  r   r   r  r;   r;   r<   r  C  r  zFuzzy.max_widthc           	      C   s   g }dD ]-}| j | \}}|dkrqd}|dkrd|}||7 }|d ur,|d|7 }|| qg }dD ]}| j d | }|dkrL|d|| q6| j d d }|d urj|dkrjd	d
||}|| d|S )NZidsr   r_   z{}<=z<={}r  r)  r  z{}<={}r   r   )r   r5   rS   rU   )	r8   r   r   rr  r  conr  r  limitr;   r;   r<   r  F  s.   


zFuzzy._constraints_to_stringr   )r=   r>   r?   r7   r  r  r  r  r   r  r&  r   r  r  r  r;   r;   r;   r<   r   
  s    
#r   c                   @   $   e Zd Zdd Zdd Zdd ZdS )ru  c                 C   s(   t ttt dd t g}|||S r+  )rA  r   r   r   GraphemeBoundaryr   )r8   r   r  Zgrapheme_matcherr;   r;   r<   r  h  s   zGrapheme._compilec                 C   s   t dt|  d S )Nz
{}GRAPHEME)r   r5   r!  r$  r;   r;   r<   r&  p  r  zGrapheme.dumpc                 C   r  r   r   r  r;   r;   r<   r  s  r  zGrapheme.max_widthN)r=   r>   r?   r  r&  r  r;   r;   r;   r<   ru  g  s    ru  c                   @      e Zd Zdd ZdS )r  c                 C   s   t jdfgS r+  )r,  ZGRAPHEME_BOUNDARYr  r;   r;   r<   r   w  r  zGraphemeBoundary.compileN)r=   r>   r?   r   r;   r;   r;   r<   r  v      r  c                   @   s   e Zd ZejZdZdd Zdd Zdd Z	dd	 Z
d
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd S )!r   GREEDY_REPEATc                 C   s    t |  || _|| _|| _d S r   )r  r7   r   r   r   )r8   r   r   r   r;   r;   r<   r7   ~  s   

zGreedyRepeat.__init__c                 C   r2  r   r3  r  r;   r;   r<   r    r4  zGreedyRepeat.fix_groupsc                 C   s"   | j ||}t| || j| jS r   )r   r   r  r   r   r8   r   r   r   r;   r;   r<   r     s   zGreedyRepeat.optimisec                 C   r5  r   r6  r  r;   r;   r<   r    r7  zGreedyRepeat.pack_charactersc                 C   r8  r   r9  r  r;   r;   r<   r    r:  zGreedyRepeat.remove_capturesc                 C   s   | j | jko
| j S r   )r   r   r   r  r  r;   r;   r<   r    r  zGreedyRepeat.is_atomicc                 C   r  r  r;   r  r;   r;   r<   r    r  zGreedyRepeat.can_be_affixc                 C   r;  r   r=  r  r;   r;   r<   r     r	  zGreedyRepeat.contains_groupc                 C   s$   | j |}| jdkr|d  |S r  )r   r  r   r   )r8   r   r   r;   r;   r<   r    s   

zGreedyRepeat.get_firstsetc                 C   s\   | j | jg}| jd u r|t n|| j | j||}|s"g S t|g| tj	fg S r   )
r  r   r   rS   r   r   r   rr   r,  rB  )r8   r   r  repeatr   r;   r;   r<   r    s   
zGreedyRepeat._compilec                 C   sH   | j d u rd}n| j }tdt| | j| j| | j|d | d S )NINF
{}{} {} {}r+   )r   r   r5   r!  r"  r   r   r&  r8   r%  r   r  r;   r;   r<   r&    s   
zGreedyRepeat.dumpc                 C   r;  r   rD  r  r;   r;   r<   r     r	  zGreedyRepeat.is_emptyc                 C   r  r   )r  r   r   r   r  r;   r;   r<   r    s   zGreedyRepeat.__eq__c                 C   s   | j d u rtS | j | j  S r   )r   r   r   r  r  r;   r;   r<   r    s   
zGreedyRepeat.max_widthc                 C   sr   | j d u rtn| j }| jdkr| j | }t|td fS | j|\}}|r+||fS | j | }t|td fS r  )r   r   r   r   r  rr  r  )r8   r   r   rm   ofsreqr;   r;   r<   r    s   
z GreedyRepeat.get_required_stringN)r=   r>   r?   r,  r  r  r"  r7   r  r   r  r  r  r  r   r  r  r&  r   r  r  r  r;   r;   r;   r<   r   z  s$    
r   c                   @   r  )r   c                 C   r  r  r;   r  r;   r;   r<   r    r  zPossessiveRepeat.is_atomicc                 C   sh   | j ||}|sg S | j| jg}| jd u r|t n|| j tjft	|g| tj
ftj
fg S r   )r   r   r  r   r   rS   r   r,  rA  rr   rB  )r8   r   r  r   r  r;   r;   r<   r    s   
zPossessiveRepeat._compilec                 C   s^   t dt|  | jd u rd}n| j}t dt|d  | j| j| | j|d | d S )NrC  r  r  r+   rH   )r   r5   r!  r   r"  r   r   r&  r  r;   r;   r<   r&    s   
zPossessiveRepeat.dumpN)r=   r>   r?   r  r  r&  r;   r;   r;   r<   r     s    r   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"r   c                 C   s&   t |  || _|| _|| _d | _d S r   )r  r7   r   r3  r   r  )r8   r   r3  r   r;   r;   r<   r7     s
   

zGroup.__init__c                 C   s(   | ||f| j j| j< | j||| d S r   )r   defined_groupsr3  r   r  r  r;   r;   r<   r    s   zGroup.fix_groupsc                 C   s   | j ||}t| j| j|S r   )r   r   r   r   r3  r  r;   r;   r<   r     s   zGroup.optimisec                 C   r5  r   r6  r  r;   r;   r<   r    r7  zGroup.pack_charactersc                 C   r;  r   r9  r  r;   r;   r<   r  
  r	  zGroup.remove_capturesc                 C   r;  r   r  r  r;   r;   r<   r    r	  zGroup.is_atomicc                 C   r  r  r;   r  r;   r;   r<   r    r  zGroup.can_be_affixc                 C   r  r  r;   r  r;   r;   r<   r     r  zGroup.contains_groupc                 C   r>  r   r?  r  r;   r;   r<   r    r  zGroup.get_firstsetc                 C   r;  r   r@  r  r;   r;   r<   r    r	  zGroup.has_simple_startc                 C   s   g }| j  }}|dk r| jj| }| jj| }| j ||f}| jj|}|d ur0|tj|fg7 }|tjt	| ||fg7 }|| j
||7 }|tjfg7 }|d urX|tjfg7 }|S r  )r3  r   private_groupsrB  	call_refsr   r,  r  ZGROUPr   r   r   rB  )r8   r   r  r   Zpublic_groupZprivate_groupr  r  r;   r;   r<   r    s   
zGroup._compilec                 C   sD   | j }|dk r| jj| }tdt| | | j|d | d S )Nr   z
{}GROUP {}r+   )r3  r   r  r   r5   r!  r   r&  )r8   r%  r   r3  r;   r;   r<   r&  2  s
   z
Group.dumpc                 C   s(   t | t |u o| j| jf|j|jfkS r   )r  r3  r   r  r;   r;   r<   r  9  s   
zGroup.__eq__c                 C   r;  r   rE  r  r;   r;   r<   r  =  r	  zGroup.max_widthc                 C   r>  r   rF  r  r;   r;   r<   r  @  r  zGroup.get_required_stringc                 C   r  r   rZ  r  r;   r;   r<   r  C  r	  zGroup.__del__N)r=   r>   r?   r7   r  r   r  r  r  r  r   r  r  r  r&  r  r  r  r  r;   r;   r;   r<   r     s"    r   c                   @   rG  )KeepKEEPN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r  F  rJ  r  c                   @   rG  )r   LAZY_REPEATN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   r   J  rJ  r   c                   @      e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zd S )!r:  AHEADBEHINDr  c                 C   s(   t |  t|| _t|| _|| _d S r   )r  r7   r   r;  r   r   )r8   r;  r   r   r;   r;   r<   r7   Q  s   



zLookAround.__init__c                 C   s   | j || j| d S r   )r   r  r;  r  r;   r;   r<   r  W  r  zLookAround.fix_groupsc                 C   s2   | j || j}| jr| r|S t| j| j|S r   )r   r   r;  r   r   r:  r  r;   r;   r<   r   Z  s   zLookAround.optimisec                 C   r5  r   r6  r  r;   r;   r<   r  a  r7  zLookAround.pack_charactersc                 C   r;  r   r9  r  r;   r;   r<   r  e  r	  zLookAround.remove_capturesc                 C   r;  r   r  r  r;   r;   r<   r  h  r	  zLookAround.is_atomicc                 C   r;  r   r<  r  r;   r;   r<   r  k  r	  zLookAround.can_be_affixc                 C   r;  r   r=  r  r;   r;   r<   r   n  r	  zLookAround.contains_groupc                 C   s&   | j r| j|kr| j|S td gS r   )r   r;  r   r  r   r  r;   r;   r<   r  q  s   
zLookAround.get_firstsetc                 C   sX   d}| j r	|tO }|r|tO }|r|tO }tj|t| j fg| j	| j tj
fg S r  )r   r  r  r  r,  Z
LOOKAROUNDr   r;  r   r   rB  r  r;   r;   r<   r  w  s   zLookAround._compilec                 C   s<   t dt| | j| j t| j  | j|d | j d S )Nz{}LOOK{} {}r+   )	r   r5   r!  	_dir_textr;  r#  r   r   r&  r$  r;   r;   r<   r&    s   zLookAround.dumpc                 C   s   | j o| j S r   )r   r   r   r  r;   r;   r<   r     r  zLookAround.is_emptyc                 C   r  r   )r  r;  r   r   r  r;   r;   r<   r    r  zLookAround.__eq__c                 C   r  r  r;   r  r;   r;   r<   r    r  zLookAround.max_widthN)r=   r>   r?   r  r7   r  r   r  r  r  r  r   r  r  r&  r   r  r  r;   r;   r;   r<   r:  N  s     
r:  c                   @   r  )!r@  r  r  r  c                 C   s4   t |  t|| _t|| _|| _|| _|| _d S r   )r  r7   r   r;  r   r   r  r  )r8   r;  r   r   r  r  r;   r;   r<   r7     s   



zLookAroundConditional.__init__c                 C   s4   | j ||| | j||| | j||| d S r   )r   r  r  r  r  r;   r;   r<   r    s   z LookAroundConditional.fix_groupsc                 C   sD   | j || j}| j|| j}| j|| j}t| j| j|||S r   )r   r   r;  r  r  r@  r   )r8   r   r   r   r  r  r;   r;   r<   r     s   zLookAroundConditional.optimisec                 C   s.   | j || _ | j|| _| j|| _| S r   )r   r  r  r  r  r;   r;   r<   r    s   z%LookAroundConditional.pack_charactersc                 C   s(   | j  | _ | j | _| j | _d S r   )r   r  r  r  r  r;   r;   r<   r    s   z%LookAroundConditional.remove_capturesc                 C      | j  o| j o| j S r   )r   r  r  r  r  r;   r;   r<   r       zLookAroundConditional.is_atomicc                 C   r  r   )r   r  r  r  r  r;   r;   r<   r    r  z"LookAroundConditional.can_be_affixc                 C   s   | j  p| j p| j S r   )r   r   r  r  r  r;   r;   r<   r     s
   
z$LookAroundConditional.contains_groupc                 C   s   t jt| jt| j fg}|| j| j| |t j	f || j
|| | j||}|r?|t j	f || |t jf |S r   )r,  ZCONDITIONALr   r   r;  r   r   r   rS   rg  r  r  rB  r  r;   r;   r<   r    s   
zLookAroundConditional._compilec                 C   s   t dt| | j| j t| j  | j|d | j t dt|  | j	|d | | j
 sGt dt|  | j
|d | d S d S )Nz{}CONDITIONAL {} {}r+   z{}EITHERrh  )r   r5   r!  r  r;  r#  r   r   r&  r  r  r   r$  r;   r;   r<   r&    s   
zLookAroundConditional.dumpc                 C   s   | j  r
| j p| j S r   )r   r   r  r  r  r;   r;   r<   r     r  zLookAroundConditional.is_emptyc                 C   r  r   )r  r   r  r  r  r;   r;   r<   r    r  zLookAroundConditional.__eq__c                 C   r  r   r  r  r;   r;   r<   r    r  zLookAroundConditional.max_widthc                 C   r  r   r  r  r;   r;   r<   r    r  z)LookAroundConditional.get_required_stringN)r=   r>   r?   r  r7   r  r   r  r  r  r  r   r  r&  r   r  r  r  r;   r;   r;   r<   r@    s     

r@  c                   @   r  )r  c                 C   s
   || _ d S r   )r   )r8   r   r;   r;   r<   r7     r	  zPrecompiledCode.__init__c                 C   s   t | jgS r   )rr   r   r  r;   r;   r<   r    r  zPrecompiledCode._compileNr  r;   r;   r;   r<   r    s    r  c                   @   s   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dZdd Zddd	Zd
d Zdd Zdd Zdd Zdd Zdd ZdS )r  FTr   c                 C   sR   t |  || _t|| _t| | _t|| _|| _| j	| j| j| j| jf| _
d S r   )r  r7   rW   r   r   r  r   r   r  rR   r  )r8   rW   r   r   r   r  r;   r;   r<   r7     s   




zProperty.__init__c                 C   s   t | j|||| jS r   )r  rW   r  r  r;   r;   r<   r    s   zProperty.rebuildc                 C   r  r   r;   r  r;   r;   r<   r     r  zProperty.optimisec                 C   r  r   r  r  r;   r;   r<   r    r	  zProperty.get_firstsetc                 C   r  r  r;   r  r;   r;   r<   r    r  zProperty.has_simple_startc                 C   sT   d}| j r	|tO }| jr|tO }|r|tO }|| jt> O }| j| j|f || j	fgS r  )
r   r  r   r  r  r  r  r  r   rW   r  r;   r;   r<   r    s   zProperty._compilec              
   C   s`   t | jd?  }|d |d | jd@  }}tdt| t| j ||t| j ddg| j	  d S )NrK   r   r+   i  z{}PROPERTY {} {}:{}{}{}r_   r  )
PROPERTY_NAMESrW   r   r5   r!  r#  r   r  r   r  )r8   r%  r   r   r   rW   r;   r;   r<   r&    s   
zProperty.dumpc                 C   s   t | j|| jkS r   )r   Zhas_property_valuerW   r   r  r;   r;   r<   r     r4  zProperty.matchesc                 C   r  r+  r;   r  r;   r;   r<   r  #  r  zProperty.max_widthNr  )r=   r>   r?   r   r,  ZPROPERTYr   ZPROPERTY_IGNr   r  ZPROPERTY_REVZPROPERTY_IGN_REVr  r7   r  r   r  r  r  r&  r  r  r;   r;   r;   r<   r    s(    

r  c                   @   r  )PrunePRUNEc                 C   r  r   )r,  r  r  r;   r;   r<   r  )  r	  zPrune._compileNr  r;   r;   r;   r<   r  &  r  r  c                   @   s   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dZdd Zddd	Zd
d Zdd Zdd Zdd ZdS )r  FTRANGEc                 C   sV   t |  || _|| _t|| _t| | _t|| _| j	| j| j| j| j| jf| _
d S r   )r  r7   lowerr  r   r   r  r   r   rR   r  )r8   r  r  r   r   r   r;   r;   r<   r7   3  s   




zRange.__init__c                 C   s   t | j| j|||S r   )r  r  r  r  r;   r;   r<   r  ?  r4  zRange.rebuildc                 C   s   | j r
| jt@ r
|r| S |jt@ r| jt@ tkr| S t }g }|D ]'}| jt	|  kr2| j
krIn q"tt|}|tdd |D | jd q"|sN| S t|| j
| j d k r`|d|  t|S )Nc                 S   ri  r;   r  rk  r;   r;   r<   r   T  rU  z"Range.optimise.<locals>.<listcomp>r   r+   r   )r   r   r   rz   r   r  r   r  r  r   r  r   r  rS   rt  rV   rR  r   )r8   r   r   r   r  r  r   r  r;   r;   r<   r   B  s(    zRange.optimisec                 C   sJ   d}| j r	|tO }| jr|tO }|r|tO }| j| j|f || j| jfgS r  )	r   r  r   r  r  r  r   r  r  r  r;   r;   r<   r  a  s   zRange._compilec              	   C   sR   t t| jd}t t| jd}tdt| t| j	 ||t
| j  d S )Nr  z{}RANGE {} {} {}{})r  r  r  r  r  r   r5   r!  r#  r   r  r   )r8   r%  r   Zdisplay_lowerZdisplay_upperr;   r;   r<   r&  l  s   
z
Range.dumpc                 C   s(   | j |  ko| jk| jkS   | jkS r   )r  r  r   r  r;   r;   r<   r  s  s   (zRange.matchesc                 C   r  r+  r;   r  r;   r;   r<   r  v  r  zRange.max_widthNr  )r=   r>   r?   r   r,  r  r   Z	RANGE_IGNr   r  Z	RANGE_REVZRANGE_IGN_REVr  r"  r7   r  r   r  r&  r  r  r;   r;   r;   r<   r  ,  s     

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dZdd Zdd Zd	d
 Zdd Zdd Zdd ZdS )r   FTc                 C   s<   t |  || _|| _|| _t| | _| j| j| jf| _d S r   )	r  r7   r   r3  r   r  r   rR   r  )r8   r   r3  r   r   r;   r;   r<   r7     s   

zRefGroup.__init__c                 C   s   zt | j| _W n" ty*   z
| jj| j | _W n ty'   td|| jw Y nw d| j  kr8| jjks@n td|| j| j	| j| j
f| _d S )Nr  r+   r  )r   r3  r	  r   r  rv   r&   r   rB  rR   r   r  r  r;   r;   r<   r    s   zRefGroup.fix_groupsc                 C   r  r  r  r  r;   r;   r<   r    r  zRefGroup.remove_capturesc                 C   s*   d}|r|t O }| j| j|f || jfgS r  )r  r  r   r3  r  r;   r;   r<   r    s   zRefGroup._compilec                 C   "   t dt| | jt| j  d S )Nz{}REF_GROUP {}{})r   r5   r!  r3  r  r   r$  r;   r;   r<   r&       
zRefGroup.dumpc                 C   r  r   r   r  r;   r;   r<   r    r  zRefGroup.max_widthc                 C   r  r   rZ  r  r;   r;   r<   r    r	  zRefGroup.__del__N)r=   r>   r?   r   r,  Z	REF_GROUPr   ZREF_GROUP_IGNr   r  ZREF_GROUP_FLDZREF_GROUP_REVZREF_GROUP_IGN_REVZREF_GROUP_FLD_REVr  r7   r  r  r  r&  r  r  r;   r;   r;   r<   r   y  s$    
	r   c                   @   rG  )rp  SEARCH_ANCHORN)r=   r>   r?   r,  r  r  r"  r;   r;   r;   r<   rp    rJ  rp  c                   @   s   e Zd Zd(ddZdd Zdd Zdd	 Zd
d Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zedd Zedd Zedd Zd d! Zd"d# Zd$d% Zd&d' ZdS ))r   Nc                 C   s    t |  |d u rg }|| _d S r   )r  r7   r  )r8   r  r;   r;   r<   r7     s   

zSequence.__init__c                 C   rK  r   )r  r  )r8   r/   r   r  rk   r;   r;   r<   r    rL  zSequence.fix_groupsc                 C   sF   g }| j D ]}|||}t|tr||j  q|| qt|S r   )r  r   r,   r   r   rS   r  )r8   r   r   r  rk   r;   r;   r<   r     s   

zSequence.optimisec                    s
  g }g }t }| jD ]o}t|tu r7|jr7|js7|j|kr0|js%t |jr0t	
 ||| |j}||j q	t|tu sCt|tu rh|j|kra|jsVt fdd|D rat	
 ||| |j}||j q	t	
 ||| ||  q	t	
 ||| t|S )z+Packs sequences of characters into strings.c                 3       | ]}t  |V  qd S r   r   rk  rZ  r;   r<   rW    r  z+Sequence.pack_characters.<locals>.<genexpr>)r   r  r  r   r   r   r   r   rW   r   _flush_charactersrS   rt  rV  r  r   rW  r  r  )r8   r   r  rW  r   rk   r;   rZ  r<   r    s4   


zSequence.pack_charactersc                 C   r\  )Nc                 S   r]  r;   r^  r   rk   r;   r;   r<   r     rU  z,Sequence.remove_captures.<locals>.<listcomp>r  r  r;   r;   r<   r    r_  zSequence.remove_capturesc                 C   r`  )Nc                 s   ra  r   rb  r  r;   r;   r<   rW    rX  z%Sequence.is_atomic.<locals>.<genexpr>rZ  r  r  r;   r;   r<   r    r4  zSequence.is_atomicc                 C   r  r  r;   r  r;   r;   r<   r    r  zSequence.can_be_affixc                 C   r`  )Nc                 s   ra  r   rd  r  r;   r;   r<   rW    rX  z*Sequence.contains_group.<locals>.<genexpr>)r  r  r  r;   r;   r<   r     r4  zSequence.contains_groupc                 C   sX   t  }| j}|r|  |D ]}|||O }d |vr|  S |d  q|t d gB S r   )r   r  r   r  discard)r8   r   r   r  rk   r;   r;   r<   r    s   zSequence.get_firstsetc                 C   s   t | jo| jd  S r  )r   r  r  r  r;   r;   r<   r    s   zSequence.has_simple_startc                 C   s<   | j }|r|d d d }g }|D ]}|||| q|S re  )r  r   r   )r8   r   r  seqr   rk   r;   r;   r<   r  	  s   zSequence._compilec                 C   s   | j D ]}||| qd S r   )r  r&  )r8   r%  r   rk   r;   r;   r<   r&    s   
zSequence.dumpc                    s   |sd S |t @ rt fdd|D st}|t@ tkrFt|}|D ]"}|j}t|dkr:|t	|d |j
d q"|t||j
d q"nt|dkrX|t	|d |d n	|t||d g |d d < d S )Nc                 3   r  r   r  rk  rZ  r;   r<   rW    r  z-Sequence._flush_characters.<locals>.<genexpr>r+   r   r   )r   r  r   r  r   _fix_full_casefoldrW  rV   rS   r   r   rt  )r   rW  r   r  literalsr   charsr;   rZ  r<   r    s"   
zSequence._flush_charactersc           
      C   s  dd t  D }t tddd | D  }g }|D ]"}||}|dkr?|||t| f |||d }|dks(qd}g }t	
|D ]$\}}	||k r^|t| || td |t| ||	 td |	}qI|t| k r|t| |d  td |S )	Nc                 S   s   g | ]}t t|qS r;   )r   r   r  rk  r;   r;   r<   r   8  r   z/Sequence._fix_full_casefold.<locals>.<listcomp>r_   c                 s   rj  r   r  rk  r;   r;   r<   rW  :  s    z.Sequence._fix_full_casefold.<locals>.<genexpr>r   r+   r   )r   r  r   r  rU   r  findrS   rV   r   _merge_chunksrV  r   r  )
rW  expandedr   chunksrf   foundr0   r  r  r  r;   r;   r<   r  4  s<   
zSequence._fix_full_casefoldc                 C   s|   t | dk r| S |   | d \}}g }| dd  D ]\}}||kr(t||}q|||f ||}}q|||f |S )NrH   r   r+   )rV   sortr  rS   )r  r  r  Z
new_chunksrk   rf   r;   r;   r<   r  V  s   zSequence._merge_chunksc                 C   r`  )Nc                 s   ra  r   r  r  r;   r;   r<   rW  l  rX  z$Sequence.is_empty.<locals>.<genexpr>r  r  r;   r;   r<   r   k  r4  zSequence.is_emptyc                 C   r
  r   )r  r  r  r;   r;   r<   r  n  r  zSequence.__eq__c                 C   r`  )Nc                 s   ra  r   r  r  r;   r;   r<   rW  r  rX  z%Sequence.max_width.<locals>.<genexpr>)sumr  r  r;   r;   r<   r  q  r4  zSequence.max_widthc                 C   sT   | j }|r|d d d }d}|D ]}||\}}||7 }|r%||f  S q|d fS )NrT  r   )r  r  )r8   r   r  rD  rk   r  r  r;   r;   r<   r  t  s   zSequence.get_required_stringr   )r=   r>   r?   r7   r  r   r  r  r  r  r   r  r  r  r&  r  r  r  r  r   r  r  r  r;   r;   r;   r<   r     s.    
&

!
r   c                   @   s\   e Zd ZdedfddZdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )r  TFc                 C   s\   t |  || _t|| _t|| _t| | _t|| _	d| _
| j| j| j| j| j	f| _d S r+  )r  r7   r   rr   r  r   r   r  r   r   
char_widthrR   r  )r8   r   r  r   r   r   r;   r;   r<   r7     s   





zSetBase.__init__c                 C   s"   t | | j| j|||| jdS r  )r  r   r  r   r  r;   r;   r<   r    s
   
zSetBase.rebuildc                 C   r  r   r  r  r;   r;   r<   r    r	  zSetBase.get_firstsetc                 C   r  r  r;   r  r;   r;   r<   r    r  zSetBase.has_simple_startc                 C   sn   d}| j r	|tO }| jr|tO }|r|tO }| j| j|f |fg}| jD ]	}||	  q$|
tjf |S r  )r   r  r   r  r  r  r   r  r   r   rS   r,  rB  )r8   r   r  rz   r   rZ   r;   r;   r<   r    s   
zSetBase._compilec                 C   sF   t dt| | jt| j t| j  | jD ]
}|	|d | qd S )Nr  r+   )
r   r5   r!  r"  r#  r   r  r   r  r&  )r8   r%  r   rh   r;   r;   r<   r&    s   
zSetBase.dumpc                 C   s   | j r
| jt@ r
|r| S | jjt@ r| jt@ tkr| S t }g }t	 }|D ]'}| 
t|rMtt|}||vrM|tdd |D | jd || q&|sR| S t| g| S )Nc                 S   ri  r;   r  rk  r;   r;   r<   r     rU  z0SetBase._handle_case_folding.<locals>.<listcomp>r   )r   r   r   r   rz   r   r  r   r  r   r  r   r   r  rS   rt  r   r   )r8   r   r   r  r  seenr   r  r;   r;   r<   _handle_case_folding  s.   
zSetBase._handle_case_foldingc                 C   s   | j r| jt@ s
dS | jjt@ r| jt@ tkrdS t }t	 }|D ]}| 
t|r6tt|}|| q"|s;dS tdd |D S )Nr+   c                 s   rj  r   rk  )r   r  r;   r;   r<   rW    rX  z$SetBase.max_width.<locals>.<genexpr>)r   r   r   r   rz   r   r  r   r  r   r  r   r   r  r   r  )r8   r  r
  r   r  r;   r;   r<   r    s$   
zSetBase.max_widthc                 C   r  r   rZ  r  r;   r;   r<   r    r	  zSetBase.__del__N)r=   r>   r?   r   r7   r  r  r  r  r&  r  r  r  r;   r;   r;   r<   r    s    
r  c                   @   v   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dZdd ZdS )
r  FTSET_DIFFc                    s~   | j }t|dkr|d t |dd  g}t|dkr,|d j| j| jd |S t fdd|D | _ |  |S )NrH   r   r+   r   c                 3   s     | ]}|j  d dV  qdS )Tr   N)r   )r   rZ   r   r   r;   r<   rW    s    z#SetDiff.optimise.<locals>.<genexpr>)	r  rV   r   r   r   r   r   rr   r  )r8   r   r   r   r  r;   r  r<   r     s   

zSetDiff.optimisec                 C   s,   | j d |o| j d | }|| jkS Nr   r+   r  r  r   r8   r   rZ   r;   r;   r<   r    s   "
zSetDiff.matchesNr  )r=   r>   r?   r   r,  r  r   ZSET_DIFF_IGNr   r  ZSET_DIFF_REVZSET_DIFF_IGN_REVr  r"  r   r  r;   r;   r;   r<   r    s    
r  c                   @   r  )
r  FT	SET_INTERc                 C      g }| j D ]}|j||dd}t|tr|jr||j  q|| qt|dkr:|d j| j	| j
d|||S t|| _ | ||S NTr   r+   r   r   )r  r   r,   r  r   r   rS   rV   r   r   r   rr   r  r8   r   r   r   r  rZ   r;   r;   r<   r        


zSetInter.optimisec                    "   t  fdd| jD }|| jkS )Nc                 3       | ]}|  V  qd S r   r  r  r   r;   r<   rW  !  r  z#SetInter.matches.<locals>.<genexpr>)rZ  r  r   r  r;   r  r<   r        
zSetInter.matchesNr  )r=   r>   r?   r   r,  r  r   ZSET_INTER_IGNr   r  ZSET_INTER_REVZSET_INTER_IGN_REVr  r"  r   r  r;   r;   r;   r<   r    s    

r  c                   @   r  )
r  FTSET_SYM_DIFFc                 C   r  r  )r  r   r,   r  r   r   rS   rV   r   r   r   rr   r  r  r;   r;   r<   r   ,  r  zSetSymDiff.optimisec                 C   s(   d}| j D ]	}|||k}q|| jkS r  r  )r8   r   rZ   rh   r;   r;   r<   r  >  s   

zSetSymDiff.matchesNr  )r=   r>   r?   r   r,  r  r   ZSET_SYM_DIFF_IGNr   r  ZSET_SYM_DIFF_REVZSET_SYM_DIFF_IGN_REVr  r"  r   r  r;   r;   r;   r<   r  $  s    
r  c                   @   s~   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dZdd Zdd	 Zd
S )r   FT	SET_UNIONc                 C   s   g }| j D ](}|j||dd}t|tr|jr||j  qt|tr(t   S || qt t f}|D ]}t|t	rK||j 
|j|j|jf q6|d |d @ rWt S t|dkrt|d }|j|j| jk| j| jd|||S t|| _ | ||S )NTr   r   r+   )r   r   r   )r  r   r,   r   r   r   r   rS   r   r  r   rW   r   r   rV   r   rr   r  )r8   r   r   r   r  rZ   
propertiesrh   r;   r;   r<   r   M  s2   





zSetUnion.optimisec           
      C   s  d}| j r	|tO }| jr|tO }|r|tO }ttg }}| jD ]}t|t	r1||j  
|j q |
| q | j| j|f |fg}| D ]-\}}	d}|rR|tO }t|	dkrd|
tj||	d f qF|
tj|t|	ft|	  qF|D ]	}||  qv|
tjf |S r  )r   r  r   r  r  r   r   r  r,   r   rS   rW   r  r   rV   r,  r  STRINGrr   r   r   rB  )
r8   r   r  rz   rW  ZothersrZ   r   r   valuesr;   r;   r<   r  m  s0   

 zSetUnion._compilec                    r  )Nc                 3   r  r   r  r  r  r;   r<   rW    r  z#SetUnion.matches.<locals>.<genexpr>)r  r  r   r  r;   r  r<   r    r  zSetUnion.matchesNr  )r=   r>   r?   r   r,  r  r   ZSET_UNION_IGNr   r  ZSET_UNION_REVZSET_UNION_IGN_REVr  r"  r   r  r  r;   r;   r;   r<   r   E  s    

 "r   c                   @   s   e Zd ZdZejZdS )SkipSKIPN)r=   r>   r?   r"  r,  r"  r  r;   r;   r;   r<   r!    s    
r!  c                   @   rG  )r   START_OF_LINEN)r=   r>   r?   r,  r#  r  r"  r;   r;   r;   r<   r     rJ  r   c                   @   rG  )r   START_OF_LINE_UN)r=   r>   r?   r,  r$  r  r"  r;   r;   r;   r<   r     rJ  r   c                   @   rG  )r   START_OF_STRINGN)r=   r>   r?   r,  r%  r  r"  r;   r;   r;   r<   r     rJ  r   c                   @   rG  )StartOfWordSTART_OF_WORDN)r=   r>   r?   r,  r'  r  r"  r;   r;   r;   r<   r&    rJ  r&  c                   @   r  )rt  FTc                 C   s   t || _t| | _| jt@ tkr,g }| jD ]}ttt|}|	dd |D  qn| j}t || _
d| _| j| j| jf| _d S )Nc                 s   rj  r   r  rk  r;   r;   r<   rW    rX  z"String.__init__.<locals>.<genexpr>F)rr   rW  r  r   r  r   r   r  r  r   r  requiredrR   r  )r8   rW  r   r  r   r  r;   r;   r<   r7     s   



zString.__init__c                 C   s(   |rd}nd}t t| j| | jdgS )NrT  r   r   )r   r   rW  r   )r8   r   r0   r;   r;   r<   r    s   
zString.get_firstsetc                 C   r  r  r;   r  r;   r;   r<   r    r  zString.has_simple_startc                 C   sB   d}|r|t O }| jr|tO }| j| j|f |t| jf| j gS r  )r  r(  REQUIRED_OPr  r   rV   r  r  r;   r;   r<   r    s   zString._compilec                 C   s@   t ddd | jD d}tdt| |t| j  d S )Nr_   c                 s   rj  r   r  rk  r;   r;   r<   rW    rX  zString.dump.<locals>.<genexpr>r  z{}STRING {}{})	r  rU   rW  r  r   r5   r!  r  r   r  r;   r;   r<   r&    s    
zString.dumpc                 C   r  r   )rV   r  r  r;   r;   r<   r    r	  zString.max_widthc                 C   s   d| fS r  r;   r  r;   r;   r<   r    s   zString.get_required_stringN)r=   r>   r?   r   r,  r  r   Z
STRING_IGNr   r  Z
STRING_FLDZ
STRING_REVZSTRING_IGN_REVZSTRING_FLD_REVr  r7   r  r  r  r&  r  r  r;   r;   r;   r<   rt    s    	rt  c                   @   r  )rV  c                 C   sD   d dd | jD }t|d}tdt| |t| j  d S )Nr_   c                 s   rj  r   r  rk  r;   r;   r<   rW    rX  zLiteral.dump.<locals>.<genexpr>r  z{}LITERAL MATCH {}{})	rU   rW  r  r  r   r5   r!  r  r   )r8   r%  r   literalr  r;   r;   r<   r&    s
   
zLiteral.dumpN)r=   r>   r?   r&  r;   r;   r;   r<   rV    r  rV  c                   @   s(   e Zd ZefddZdd Zdd ZdS )r   c           
         s   || _ || _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@ }| B }g }|D ]}	t|	trVdd |	D }	| fdd|	D  qH|jtdd dd |D | _d S )Nc                 S   ri  r;   r  rk  r;   r;   r<   r     rU  z&StringSet.__init__.<locals>.<listcomp>c                    s   g | ]}t | d qS )r   rj  rk  r   r;   r<   r     r   T)r  r   c                 S   ri  r;   )r   )r   choicer;   r;   r<   r     rU  )r   r   r  r   rR   r  Zset_keynamed_lists_usedrV   r  rz   r~   r,   r-   rS   r  r   )
r8   r   r   r   r  r  r  Z
fold_flagschoicesr   r;   r   r<   r7     s*   


zStringSet.__init__c                 C   r  )Nz{}STRING_SET {}{})r   r5   r!  r   r  r   r$  r;   r;   r<   r&    r  zStringSet.dumpc                 C   r  r   rZ  r  r;   r;   r<   r    r	  zStringSet.__del__N)r=   r>   r?   r   r7   r&  r  r;   r;   r;   r<   r     s    !r   c                   @   sb   e Zd ZdZdd ZdddZdddZdd
dZdddZdddZ	dd Z
dd Zdd ZdS )Sourcez1Scanner for the regular expression source string.c                 C   sL   t |tr|| _t| _n|d| _dd | _d| _d| _|d d | _d S )Nzlatin-1c                 S   r  r   )r  r~  r;   r;   r<   r    s   
 z!Source.__init__.<locals>.<lambda>r   F)	r,   r-   r   r  	char_typedecoder0   r%  r  )r8   r   r;   r;   r<   r7     s   

zSource.__init__Fc                 C   s   | j }| j}z%| jr'|s'	 ||  r|d7 }n|| dkr%|d|}nnq|| W S  ty:   |d d  Y S  tyH   |d d  Y S w NTr+   r  r)   r   )r   r0   r%  isspacer  r  r	  )r8   override_ignorer   r0   r;   r;   r<   r.    s"   



zSource.peekc                 C   s   | j }| j}z,| jr'|s'	 ||  r|d7 }n|| dkr%|d|}nnq|| }|d | _|W S  tyD   || _|d d  Y S  tyW   t|| _|d d  Y S w r1  )r   r0   r%  r2  r  r  r	  rV   )r8   r3  r   r0   r   r;   r;   r<   r   4  s*   




z
Source.getr+   c                 C   s   | j }| j}zQ| jrDg }t||k r>	 ||  r|d7 }n|| dkr+|d|}nnq|||  |d7 }t||k sd|}n||||  }|t|7 }|| _|W S  tyj   t|| _d| Y S  t	y|   t|| _d| Y S w NTr+   r  r)   r_   )
r   r0   r%  rV   r2  r  rS   rU   r  r	  )r8   r1   r   r0   	substringr;   r;   r<   get_manyP  s8   



zSource.get_manyTc                 C   s2  | j }| j}| jrb|sbz6g }	 ||  r|d7 }n"|| dkr'|d|}n|| |v |kr;|||  |d7 }nnq|| _W n tyO   t|| _Y n ty\   t|| _Y nw d	|S z!|| |v |krw|d7 }|| |v |ksk|| j| }|| _|W S  ty   || j| }|| _| Y S w r4  )
r   r0   r%  r2  r  rS   r  rV   r	  rU   )r8   test_setr   r  r   r0   r5  r;   r;   r<   r  v  sD   




zSource.get_whilec                 C   s   | j }| j}zF| jr3	 ||  r|d7 }n|| dkr#|d|}n|| |v |kr0|d7 }nnqn|| |v |krG|d7 }|| |v |ks;|| _W d S  ty[   t|| _Y d S  tyi   t|| _Y d S w NTr+   r  r)   )r   r0   r%  r2  r  r  rV   r	  )r8   r7  r   r   r0   r;   r;   r<   
skip_while  s.   


zSource.skip_whilec                 C   s   | j }| j}| jrQz4|D ]+}	 ||  r|d7 }n|| dkr'|d|}nnq|| |kr3 W dS |d7 }q|| _W dS  tyG   Y dS  tyP   Y dS w |||sYdS |t| | _dS )NTr+   r  r)   F)	r   r0   r%  r2  r  r  r	  r  rV   )r8   r5  r   r0   r   r;   r;   r<   r     s4   


zSource.matchc                 C   s$   |  |std|| j| jd S )Nz
missing {})r   r&   r5   r   r0   )r8   r5  r;   r;   r<   r$    s   
zSource.expectc                 C   s~   | j }| j}z%| jr%	 ||  r|d7 }n|| dkr#|d|}nnq|t|kW S  ty5   Y dS  ty>   Y dS w r8  )r   r0   r%  r2  r  rV   r  r	  )r8   r   r0   r;   r;   r<   at_end  s"   
zSource.at_endNr  r+   )TF)T)r=   r>   r?   r@   r7   r.  r   r6  r  r9  r   r$  r:  r;   r;   r;   r<   r.    s    



&
0'r.  c                   @   s:   e Zd ZdZddi fddZdddZdd	 Zd
d ZdS )Infoz"Info about the regular expression.r   Nc                 C   sl   |t |t@ pt O }|| _|| _d| _|| _d| _i | _i | _	|| _
i | _g | _i | _i | _g | _i | _d S NFr   )DEFAULT_FLAGSr  r  rz   rO  rH  r  rB  r  
group_namer/  r,  open_groupsr  r  r  r  )r8   rz   r/  r  r;   r;   r<   r7     s   
zInfo.__init__c                 C   s   | j |}|d u r-	 |  jd7  _|d u s| j| jvrnq| j}|r-|| j |< || j|< || jv rAt| jd  }|| j|< |}| j| | j|dd | j|< |S )NTr+   r   )	r  r   rB  r?  r@  rV   r  rS   r  )r8   r   r3  Zgroup_aliasr;   r;   r<   r#    s$   



zInfo.open_groupc                 C   s   | j   d S r   )r@  r   r  r;   r;   r<   r&  4  r  zInfo.close_groupc                 C   sB   | j t@ pt}|tkrdS | rt|}n| j|}|| jv S r  )	rz   r  r  r!   rQ  r   r  r   r@  )r8   r   r  r3  r;   r;   r<   r9  7  s   

zInfo.is_open_groupr   )r=   r>   r?   r@   r7   r#  r&  r9  r;   r;   r;   r<   r<    s    
r<  c                 C   s   i }g }| j D ]b\}}}|j||f}||}|du rf|jdkrBt| jt@ }	t|t}
|	|
f||fkrA|t	t
||||f n| j|j }|d }|dd ||fkr^||||f t
|}|||< ||_q|| _|| _dS )zkChecks whether the reverse and fuzzy features of the group calls match
    the groups which they call.
    Nr   r+   )r  r3  r   r   rz   r   r,   r   rS   r  rV   r  r  r  additional_groups)r   r  r  rA  callr   r  r  r  revZfuzZdef_infor3  r;   r;   r<   _check_group_featuresE  s.   



rD  c                 C   sb   |  t|t@ \}}|r&d|_|tkrd}|j}|t@ s"|t M }|j}nd}d}d}|||fS )z>Gets the required string and related info of a parsed pattern.TrT  r   r;   )r  r   r   r(  r   r   r   r  )r  rz   
req_offsetr(  	req_flags	req_charsr;   r;   r<   _get_required_stringl  s   

rH  c                   @   s   e Zd ZdddZdd ZdS )r'   r   c                    s  || _ g }|D ].\}}t|}t||j t jt@ |_t| }|	 s.t
d|j|j||  qt|  fddt|D }t|}t jt@ }| |}| }t| j\}	}
}t |  jrtt
d|j|jt jt@ }||tjfg }t|}| szt ||}t|}|| }W n	 ty   Y nw  jt@ pt }|dt!t"fvrt#dt$d |t%@ |B |i i i g |	|
|t&|| _'d S )Nzunbalanced parenthesisc                    s    g | ]\}}t  |d  |qS r;  )r   )r   ra  ri   rZ  r;   r<   r     s     z$Scanner.__init__.<locals>.<listcomp>z(recursive regex not supported by Scannerr   z5VERSION0 and VERSION1 flags are mutually incompatible)(lexiconr.  r<  r/  r   rz   r%   r%  r   r:  r&   r   r0   rS   r  	enumerater   r   r   r  rH  rD  r  r   r,  SUCCESSr   r  r   r  rF   r  r  r   r!   r	  r   rN  rV   scanner)r8   rI  rz   patternsphraseactionr   r  r   rE  rG  rF  r   Zfs_coder  r;   rZ  r<   r7     sX   




zScanner.__init__c           	      C   s   g }|j }| j|j}d}	 | }|sn-| }||krn$| j|jd  d }t|dr7|| _|| | }|d ur?|| |}q|||d  fS )Nr   Tr+   __call__)rS   rL  r   r  rI  	lastindexru   r3  )	r8   r   r  rS   r   rh   rZ   jrO  r;   r;   r<   scan  s(   
zScanner.scanN)r   )r=   r>   r?   r7   rS  r;   r;   r;   r<   r'     s    
Ir'   r  r)   	)rd   re   rg   nrj   tr  ZDigitTZBlankZSpaceWord)r   r   hrk   r   rm   r"   r  )r   r   rk   r   rm   r"   )r   re   r   KrZ   r   Zz)re   r   rZ   r   )ZFAILr   r  r"  )rp   r  r  r=  (  enumr   r  collectionsr   regexr   __all__r6   r&   rB   rE   rF   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~   r>  rN  ZSCOPED_FLAGS	frozensetascii_lettersr   r
  r  r  	octdigitsrU  	hexdigitsr^  r   r  r  r  Zget_code_sizeZBYTES_PER_CODEZBITS_PER_CODEr   rF  r   r   r  r  r  rm  OPCODESro   r,  rJ  r  rh   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   r   r'  r(  r!  r)  r<  r*  r+  r,  r/  r-  rG  rL  rM  r0  rP  r"  r\  r]  r_  r   r~  r  rn  ro  rq  rr  rs  r  r   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r!  r  r  r  r  r)  r  r#  r  r  r  r  r   r   r   rA  rH  r   rC  r  r   r=  r  r  r  r   r   r  r   r   r  r  r   ru  r  r   r   r   r  r   r:  r@  r  r  r  r  r   rp  r   r  r  r  r  r   r!  r   r   r   r&  rt  rV  r   r.  r<  rD  rH  r'   Zget_propertiesr  r  r  r  r  r   r   r   Zprop_valuesr  rV   val_namer  r}  r  r  r|  dictrz  rx   r{  ry  rw  rx  rv  r2  r;   r;   r;   r<   <module>   s  5





U2


V
 
=
	\$+#S!
$



)&	FH
F8   .	JY \RDU8M1 Vi!N7) wA'a















	