o
    GgXc                    @   s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZG dd deZ	G dd de
ZG dd dejZd	d
 ZedkrDe  dS dS )    )proxyNc                          e Zd Z fddZ  ZS )StrSubclassc                       t t |S N)r   super__getitem__selfindex	__class__ S/var/www/html/AyurvedaChatbot/venv/lib/python3.10/site-packages/regex/test_regex.pyr         zStrSubclass.__getitem____name__
__module____qualname__r   __classcell__r   r   r   r   r   
       r   c                       r   )BytesSubclassc                    r   r   )r   r   r   r	   r   r   r   r      r   zBytesSubclass.__getitem__r   r   r   r   r   r      r   r   c                   @   s  e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdd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'd0d1 Z(d2d3 Z)d4d5 Z*d6d7 Z+d8d9 Z,d:d; Z-d<d= Z.d>d? Z/d@dA Z0dBdC Z1dDdE Z2dFdG Z3dHdI Z4dJdK Z5dLdM Z6dNdO Z7dPdQ Z8dRdS Z9dTdU Z:dVdW Z;dXdY Z<dZd[ Z=d\d] Z>d^d_ Z?d`da Z@dbdc ZAddde ZBdfdg ZCdhdi ZDdjdk ZEdldm ZFdndo ZGdpdq ZHdrds ZIdtdu ZJdvdw ZKdxdy ZLdzd{ ZMd|d} ZNd~d ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd Zjdd Zkdd Zldd Zmdd Zndd Zodd ZpddÄ Zqddń ZrddǄ ZsddɄ Ztdd˄ Zudd̈́ Zvddτ Zwddф Zxddӄ ZyddՄ Zzddׄ Z{ddل Z|ddۄ Z}dd݄ Z~dd߄ Zdd Zdd Zdd Zdd Zdd ZdS )
RegexTestsz<class '_regex.Pattern'>z5cannot process flags argument with a compiled patternzinvalid group referencez	missing >zbad character in group namezmissing group namez	missing <zunknown groupzbad escape \(end of pattern\)zbad escape \\zunterminated character setz2cannot use a string pattern on a bytes-like objectz2cannot use a bytes pattern on a string-like objectz"expected str instance, bytes foundz'expected a bytes-like object, str foundz,cannot use UNICODE flag with a bytes patternz9ASCII, LOCALE and UNICODE flags are mutually incompatiblez
missing \)zunbalanced parenthesiszbad character rangeznothing to repeatzmultiple repeatzcannot refer to an open groupzduplicate groupz'bad inline flags: cannot turn flags offzundefined character nameNc                    s,    ||   fdd|| d S )Nc                    sJ   t |ttfrt| |D ]	\}}|| qd S t| t|  d S r   )
isinstancetuplelistzipassertIstype)actualexpectxymsgrecurser
   r   r   r%   2   s
   z,RegexTests.assertTypedEqual.<locals>.recurse)assertEqual)r
   r   r    r$   r   r#   r   assertTypedEqual/   s   zRegexTests.assertTypedEqualc                 C   s:   d}t d}t|}|d|dkr|   d S d S )NQabbbcRzab+c)regexcompiler   findallfail)r
   sr!   r"   r   r   r   test_weakref;   s   
zRegexTests.test_weakrefc                 C   s   |  tdddd |  tdd d |  tdddd |  tdd d |  td	d
d  |  tdddd |  tdd d |  tdddd |  tdd d |  tddd  d S )Na*xxxr   r   r   zx*axxx+      r!   aaaxxxar   r6   a+)r&   r)   searchspanmatchr
   r   r   r   test_search_star_plusB   s   z RegexTests.test_search_star_plusc                 C   s   t |d }t|d S )Nr   r5   )intstr)r
   matchobj	int_valuer   r   r   bump_numN   s   zRegexTests.bump_numc                 C   s  |  tdddd |  td| jdd |  td| jddd	 |  td
dd dd |  td
ddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddtdtd td td td td   |  td!d"d#d$ |  tdd%dd |  tdd&dd |  tdd'dd |  tdd(dd) |  td*d+d*d, d S )-N(?i)b+r!   	bbbb BBBBx x\d+z08.2 -2 23x99yz9.3 -3 24x100yr6   z9.3 -3 23x99y.c                 S      dS )N\nr   mr   r   r   <lambda>Y       z1RegexTests.test_basic_regex_sub.<locals>.<lambda>rK   
(?P<a>x)z
\g<a>\g<a>xxxxxxz
\g<a>\g<1>
(?P<unk>x)z\g<unk>\g<unk>z
\g<1>\g<1>az\t\n\v\r\f\a\bz	
	
	   
               z^\s*XtestXtestz\x0Az\u000Az
\U0000000Az\N{LATIN CAPITAL LETTER A}A   xs   \x0A   
)r&   r)   subrD   chrr>   r   r   r   test_basic_regex_subR   sH   zRegexTests.test_basic_regex_subc                 C      |  tdddd d S )NrT   z\g<1>\g<1>\brR   zxxxxr&   r)   rc   r>   r   r   r   test_bug_449964q   s   zRegexTests.test_bug_449964c                 C   s\   |  tdddd |  tdddd |  tdddd |  tdddd d S )Nz\r\nrK   z
abc
def
zabc
def

rP   rg   r>   r   r   r   test_bug_449000v   s   zRegexTests.test_bug_449000c                    sn   t d | t| j fdd | t| j fdd | t| j fdd | t| j fdd d S )NrI   c                         t  dt jS Nr`   )r)   r=   Ir   patternr   r   rN          z*RegexTests.test_bug_1661.<locals>.<lambda>c                      rk   rl   )r)   r;   rm   r   rn   r   r   rN      rp   c                      rk   rl   )r)   r+   rm   r   rn   r   r   rN      rp   c                      s   t  t jS r   )r)   r*   rm   r   rn   r   r   rN          )r)   r*   assertRaisesRegex
ValueErrorFLAGS_WITH_COMPILED_PATr>   r   rn   r   test_bug_1661   s   








zRegexTests.test_bug_1661c                 C   s    |  tttd| j d S )Nz(?P<quote>)(?(quote)))r&   reprr   r)   r*   PATTERN_CLASSr>   r   r   r   test_bug_3629   s   zRegexTests.test_bug_3629c                 C   s  |  tdddd |  tdddd |  tdddd |  tdddd |  tdd	dd
 |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd
 |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd  | tj| jd!d"  | tj| jd#d"  | tj| jd$d"  | tj| jd%d"  | tj| jd&d"  | tj| jd'd"  | tj| jd(d"  | tj| jd)d"  | tj| jd*d"  | tj| jd+d"  | tj| jd,d"  | tj| jd-d"  |  td.d/dd |  td0d1d2d3 |  td0d4d2d5 d S )6Nr!   \0 z\000z\001z\008z 8z\009z 9z\111rm   z\117Oz\1111I1z\00z\07z\08\09z\0az az\400u   Āz\777u   ǿra   s   \400    s   \777   c                   S      t dddS )Nr!   \1r)   rc   r   r   r   r   rN         z=RegexTests.test_sub_template_numeric_escape.<locals>.<lambda>c                   S   r   )Nr!   z\8r   r   r   r   r   rN      r   c                   S   r   )Nr!   z\9r   r   r   r   r   rN      r   c                   S   r   )Nr!   \11r   r   r   r   r   rN      r   c                   S   r   )Nr!   z\18r   r   r   r   r   rN      r   c                   S   r   )Nr!   z\1ar   r   r   r   r   rN      r   c                   S   r   )Nr!   z\90r   r   r   r   r   rN      r   c                   S   r   )Nr!   z\99r   r   r   r   r   rN      r   c                   S   r   )Nr!   \118r   r   r   r   r   rN      r   c                   S   r   )Nr!   \11ar   r   r   r   r   rN      r   c                   S   r   )Nr!   z\181r   r   r   r   r   rN      r   c                   S   r   )Nr!   z\800r   r   r   r   r   rN      r   z(((((((((((x)))))))))))r   z((((((((((y))))))))))(.)r   xyzxz8r   xza)r&   r)   rc   rr   errorINVALID_GROUP_REFr>   r   r   r    test_sub_template_numeric_escape   sN   z+RegexTests.test_sub_template_numeric_escapec                 C   s2   |  tdddd |  tddddd d S )NrU   baaaaabbbbbr5   baaaarg   r>   r   r   r   test_qualified_re_sub   s   z RegexTests.test_qualified_re_subc                 C   rf   )Nz(\S)\s+(\S)z\1 \2zhello  therezhello thererg   r>   r   r   r   test_bug_114660   s   zRegexTests.test_bug_114660c                 C   sh   t jdkr| tdddd n| tdddd | tdddd | tdddd	 d S )
Nr6   r\   r   z(?V0)x*-abxdz-a-b--d-z-a-b-d-z(?V1)x*r3   zab-dsysversion_infor&   r)   rc   r>   r   r   r   test_bug_462270   s
   
zRegexTests.test_bug_462270c                 C   s*   d}|  td| d d|d d S )N   ÿz(?P<z>a)abcrU   )r&   r)   r;   group)r
   
group_namer   r   r   test_bug_14462   s   zRegexTests.test_bug_14462c                 C   s   |  tj| jdd  |  tj| jdd  |  tj| jdd  |  tj| jdd  |  tj| jdd  |  t| jdd  | 	t
dd	d
d | 	t
ddd
d |  tj| jdd  d S )Nc                   S      t dddS )NrQ   z\g<arR   r   r   r   r   r   rN      r   z/RegexTests.test_symbolic_refs.<locals>.<lambda>c                   S   r   )NrQ   z\g<rR   r   r   r   r   r   rN      r   c                   S   r   )NrQ   \grR   r   r   r   r   r   rN      r   c                   S   r   )NrQ   z\g<a a>rR   r   r   r   r   r   rN      r   c                   S   r   )NrQ   z\g<1a1>rR   r   r   r   r   r   rN      r   c                   S   r   )NrQ   z\g<ab>rR   r   r   r   r   r   rN      r   z(?P<a>x)|(?P<b>y)z\g<b>rR    z\2c                   S   r   )NrQ   z\g<-1>rR   r   r   r   r   r   rN      r   )rr   r)   r   
MISSING_GTMISSING_GROUP_NAME
MISSING_LTBAD_GROUP_NAME
IndexErrorUNKNOWN_GROUP_Ir&   rc   r>   r   r   r   test_symbolic_refs   s   zRegexTests.test_symbolic_refsc                 C   st   |  tdddd |  tdddd |  tdddd |  td	ddd
 |  td	dddd d S )NrE   r!   rF   )rG      zb+)zx BBBBr5   r   )r   r   zb*)xxxyxzx   r   )xxxyzr   )r&   r)   subnr>   r   r   r   test_re_subn   s
   zRegexTests.test_re_subnc                 C   s`  |  tddg d tjdkrB|  tddg d |  tddg d |  td	dg d |  td
dg d n0|  tddg d |  tddg d |  td	dg d |  td
dg d |  tddg d |  tddg d |  tddg d |  tddg d |  dd tddD g d |  tddg d |  dd tddD g d |  tddg d |  dd tddD g d |  tddg d  |  d!d tddD g d  |  td"d#g d$ |  td%d#g d& |  td'd#g d( d S ))N::a:b::cr   rU   r   r   cr   :*r   r   rU   r   r   r   r   r   (:*)r   r   r   r   rU   r   r   r   r   ::r   r   r   r   r   z(?::*)z(:)*)r   r   r   NrU   r   r   Nr   r   r   Nr   Nr   r   rU   r   r   r   r   rU   r   r   r   r   )r   r   rU   r   r   r   r   z([b:]+))r   r   rU   z:b::r   z(b)|(:+))r   Nr   rU   Nr   r   r   Nr   Nr   r   z(?:b)|(?::+))r   rU   r   r   r   r!   xaxbxcc                 S      g | ]}|qS r   r   .0rM   r   r   r   
<listcomp>  rp   z,RegexTests.test_re_split.<locals>.<listcomp>z(?r)x)r   r   rU   r   c                 S   r   r   r   r   r   r   r   r     rp   z(x)|(y))
r   r!   NrU   r!   Nr   r!   Nr   c                 S   r   r   r   r   r   r   r   r   $  rp   z(?r)(x)|(y))
r   r!   Nr   r!   NrU   r!   Nr   c                 S   r   r   r   r   r   r   r   r   )  rp   (?V1)\bza b c)r   rU    r   r   r   r   z(?V1)\m)r   a zb r   z(?V1)\M)rU    bz cr   )r&   r)   splitr   r   	splititerr>   r   r   r   test_re_split   s8   
""zRegexTests.test_re_splitc                 C   s   |  tdddg d |  tdddg d |  tdddg d tjd	kr;|  td
ddg d d S |  td
ddg d d S )Nr   r   r   )r   rU   b::cza:b:c:d)rU   r   zc:dz(:))r   r   rU   r   r   r   r   )r   r   r   r   za:b::c)r&   r)   r   r   r   r>   r   r   r   test_qualified_re_split3  s   
z"RegexTests.test_qualified_re_splitc                 C   s  |  tddg  |  tddg d |  tddg d |  tddg d |  tdd	d
g |  tdd	d
g |  tdddg |  tdddg |  tdddg |  tdddg |  tdddg |  tdddg d S )N:+r   
a:b::c:::dr   r   z:::(:+)(:)(:*))r   r   )r   r   )r   r   z\((?P<test>.{0,5}?TEST)\)z	(MY TEST)zMY TESTz\((?P<test>.{0,3}?TEST)\)z\((?P<test>.{0,3}?T)\)z(MY T)zMY Tz[^a]{2}[A-Z]z
  Sz  Sz[^a]{2,3}[A-Z]z
   Sz   SzX(Y[^Y]+?){1,2}( |Q)+DEFzXYABCYPPQ
Q DEF)zYPPQ
r   z(\nTest(\n+.+?){0,2}?)?\n+Endz
Test
xyz
xyz
End)z
Test
xyz
xyzz
xyzr&   r)   r+   r>   r   r   r   test_re_findall@  s<   



zRegexTests.test_re_findallc                 C   s   |  tddg d d S )Nz(a|(b))aba)rU   r   )r   r   r   r   r>   r   r   r   test_bug_117612Y     zRegexTests.test_bug_117612c                 C   s  |  tddd d  d |  tddd d  d |  tddd d |  tddd d |  tddddd td}|  |dd d  d |  |d	d d  d
 |  |dd d  d |  |dd d  d |  |dd d  d tdd}|  | d |  |dd |  |dd |  |ddd td}|  |ddddd |  |d	dddd |  |ddddd d S )NrU   rU   (a)rU   rU   r   r5   z((a)|(b))(c)?)rU   rU   rU   NNr   )r   r   Nr   Nac)r   rU   rU   Nr   bc)r   r   Nr   r   z!(?:(?P<a1>a)|(?P<b2>b))(?P<c3>c)?r   r6   )rU   NNa1b2c3)Nr   NrU   Nr   )r&   r)   r=   r   r*   )r
   patrM   r   r   r   test_re_match]  s(   

 zRegexTests.test_re_matchc                 C   s6  |  tddd d  d |  tddd d  d |  tddd  |  tddd  |  tdd	d d  d
 |  tddd d  d |  tddd d  d |  tddd d  d td}|  |dd d  d |  |dd d  d |  |dd  |  |dd  d S )Nz^(\()?([^()]+)(?(1)\))$r   )r   (rU   rU   rU   NrU   za)z(az^(?:(a)|c)((?(1)b|d))$ab)r   rU   r   cd)r   Ndz^(?:(a)|c)((?(1)|d))$)rU   rU   r   z(?P<g1>a)(?P<g2>b)?((?(g2)c|d))r   )r   rU   r   r   ad)r   rU   Nr   abdr   )r&   r)   r=   r*   r
   pr   r   r   test_re_groupref_existsx  s   
z"RegexTests.test_re_groupref_existsc                 C   s   |  tddd d  d |  tddd d  d |  tddd  |  tddd  |  td	d
d d  d |  tddd d  d |  tdddg d S )Nz^(\|)?([^()]+)\1$|a|)r   |rU   z^(\|)?([^()]+)\1?$rU   r   za|z|az^(?:(a)|c)(\1)$aa)r   rU   rU   z^(?:(a)|c)(\1)?$r   )r   NNzE(?i)(.{1,40}?),(.{1,40}?)(?:;)+(.{1,80}).{1,40}?\3(\ |;)+(.{1,80}?)\1z&TEST, BEST; LEST ; Lest 123 Test, Best)TESTz BESTz LESTr   z123 )r&   r)   r=   r+   r>   r   r   r   test_re_groupref  s   
zRegexTests.test_re_grouprefc                 C   s"   |  tdd ddd d S )N#(?P<first>first) (?P<second>second)first secondfirstsecondr   r   )r&   r)   r=   	groupdictr>   r   r   r   test_groupdict  s
   
zRegexTests.test_groupdictc                 C   s   |  tdddd d S )Nr   r   z\2 \1 \g<second> \g<first>zsecond first second first)r&   r)   r=   expandr>   r   r   r   test_expand  s   
zRegexTests.test_expandc                 C   s  |  tddd  |  tddd  |  tddd  |  tddd  |  tddd d |  td	dd d |  td
dd d |  tddd d |  tddd d |  tddd d |  tddd d |  tddd d |  tddd  |  tddd  |  tddd  |  tddd  |  tddd d |  tddd d |  tddd d |  tddd d |  ttddd |  ttddd |  ttddd |  ttddd |  ttd dd |  ttd!dd |  ttd"dd |  ttddd |  td#dd  |  ttd#d$d d S )%Nz	^(\w){1}$r   z
^(\w){1}?$z^(\w){1,2}$z^(\w){1,2}?$z	^(\w){3}$r5   r   z^(\w){1,3}$z^(\w){1,4}$z^(\w){3,4}?$z
^(\w){3}?$z^(\w){1,3}?$z^(\w){1,4}?$z^x{1}$r0   z^x{1}?$z^x{1,2}$z	^x{1,2}?$z^x{1}r   r!   z^x{1}?z^x{0,1}z^x{0,1}?r   z^x{3}$Tz^x{1,3}$z^x{1,4}$z	^x{3,4}?$z^x{3}?$z	^x{1,3}?$z	^x{1,4}?$z^x{}$zx{})r&   r)   r=   boolr>   r   r   r   test_repeat_minmax  s<   zRegexTests.test_repeat_minmaxc                 C   s  |  tdjd |  tdjtjtjB tjB  |  tdjtjtjB tjB  |  tdj	d |  tdj
i  |  tdj
ddd |  tddjd	 |  tddjd |  td
djd	 |  td
djd |  td
d d |  td
ddd |  tddjd |  tddjd |  tttddj| j td}d	|j
d< |  |j
d d d S )Nz
(?i)(a)(b)s
   (?i)(a)(b)r   z(?i)(?P<first>a)(?P<other>b)r5   )r   otherr   rU   r   zb(c)abcdef   r4   r   r6   r   r5   r   zabc(?P<n>def)n)r&   r)   r*   ro   flagsrm   UDEFAULT_VERSIONr`   groups
groupindexr=   posendposr;   r<   stringregsrv   r   rerw   r   r   r   r   test_getattr  s4   

zRegexTests.test_getattrc                 C   s  |  tddd d |  tddd d |  tddtjd d	 |  td
dtjd d	 |  tddtjd d |  tddtjd d |  tddtjd d |  tddtjd d |  tddtjd  |  tddd d	 |  td
dd d	 |  tddtjd d |  tddtjd d |  tddtjd  |  tddd d |  tddtjd d |  tddtjd d d S )Nz\b(b.)\bzabcd abc bcd bxr5   bxz\B(b.)\Bzabc bcd bc abxds   \b(b.)\bs   abcd abc bcd bxs   bxs   \B(b.)\Bs   abc bcd bc abxd^abc$z
abc
r   r   z	^\Aabc\Z$s   ^abc$s   
abc
   abcs	   ^\Aabc\Z$z\d\D\w\W\s\Sz1aa! as   \d\D\w\W\s\Ss   1aa! a)r&   r)   r;   LOCALEUNICODEMr>   r   r   r   test_special_escapes  s~   zRegexTests.test_special_escapesc              	   C   s   |  tddd d |  tddtjd d |  dtjddtjdd |  dtjddtjdd |  dtjd	dtjdd d S )
Nz([\u2222\u2223])u   ∢r5   r   rI   u   eèéêëēěėr  z%[e\xe8\xe9\xea\xeb\u0113\u011b\u0117]z*e|\xe8|\xe9|\xea|\xeb|\u0113|\u011b|\u0117)r&   r)   r=   r  joinr+   r>   r   r   r   test_bigcharset  s2   zRegexTests.test_bigcharsetc                 C   s<   |  tddtjd d |  tddtjd d d S )Na.ba
br   a.*bza

b)r&   r)   r=   DOTALLr>   r   r   r   test_anyall  s   zRegexTests.test_anyallc                 C   s  |  tddd d |  tddd d |  tddd d |  tddd d |  td	d
d d |  tddd d |  tdd
d d |  tdd
d d |  tddd d |  tddd d |  tddd d d S )Nz(a(?=\s[^a]))a br5   rU   z(a(?=\s[^a]*))z(a(?=\s[abc]))z(a(?=\s[abc]*))za bcz(a)(?=\s\1)a az(a)(?=\s\1*)a aaz(a)(?=\s(abc|a))z(a(?!\s[^a]))z(a(?!\s[abc]))za dz(a)(?!\s\1)z(a)(?!\s(abc|a))r&   r)   r=   r>   r   r   r   test_non_consuming   s   zRegexTests.test_non_consumingc                 C   s  |  tddtjd d |  tddtjd d |  tddtjd d |  td	d
tjd d
 |  tddtjd d |  tddtjd d |  tddtjd d |  tddtjd d |  tddtjd d |  tdd d |  tdd d |  ttddd |  ttddd |  ttddd |  ttddd d S )Nr   ABCr   r  s   ABCz
(a\s[^a]*)za bbr5   z
(a\s[abc])r  z(a\s[abc]*)z	((a)\s\2)r  z
((a)\s\2*)r  z((a)\s(abc|a))z((a)\s(abc|a)*)z[Z-a]_r   z	(?i)[Z-a]z(?i)naonAoTz
(?i)n\xE3ou   nÃou   NÃOz(?i)su   ſ)r&   r)   r=   rm   r<   r   r>   r   r   r   test_ignore_case.  s2   zRegexTests.test_ignore_casec                 C   s  |  tdd d |  tdd d |  tdd d |  tdd d |  td	d
 d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  td	d d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d d}|D ]}|D ]}td| |s|   qq|  ttdd d! |  ttdd"d! |  ttd#d d! |  ttd#d"d! |  ttd$d d! |  ttd%d d! |  ttdd d! |  ttd#d d! |  ttd$d d! |  ttd%d d! |  ttd&dd! |  ttd&dd! |  td'd(d)d*g |  td+d(d)d*g |  td,d- d. |  td/d- d. |  td0d- d. |  tjd1d2dgd3 d4 |  tjd1d5d6gd3 d7 d S )8Nz(?fi)ssSSr   r   z(?fi)SSss   ßr   z#(?fi)\N{LATIN SMALL LETTER SHARP S}z (?fi)\N{LATIN SMALL LIGATURE ST}STz(?fi)STu   ﬆu   ﬅz(?fi)SSTu   ßtu   sﬅu   sﬆSSTr4   z(?fi)FFIu   ﬃu   ﬀiu   fﬁz!(?fi)\N{LATIN SMALL LIGATURE FFI}FFIr9   z!(?fi)\N{LATIN SMALL LIGATURE FF}iz!(?fi)f\N{LATIN SMALL LIGATURE FI}u   Σσςz(?fi)z(?iV1)ffu   ﬀﬁTu   ﬁﬀz(?iV1)fiz
(?iV1)fffiz(?iV1)f\uFB03z(?iV1)f\uFB01z/(?iV0)\m(?:word){e<=3}\M(?<!\m(?:word){e<=1}\M)z.word word2 word word3 word word234 word23 wordword234word23z/(?iV1)\m(?:word){e<=3}\M(?<!\m(?:word){e<=1}\M)z$(?fi)a\N{LATIN SMALL LIGATURE FFI}nez
  affine  )r      z*(?fi)a(?:\N{LATIN SMALL LIGATURE FFI}|x)nez+(?fi)a(?:\N{LATIN SMALL LIGATURE FFI}|xy)nez(?fi)a\L<options>neaffineoptionsr   r   u   aﬃneffir   r   )r&   r)   r;   r<   r=   r,   r   r+   )r
   sigmach1ch2r   r   r   test_case_foldingH  sP  





















zRegexTests.test_case_foldingc                 C   s   |  tddd d d S )Nz(\s)r   r5   r  r>   r   r   r   test_category  r   zRegexTests.test_categoryc                 C   s4   |  tddd d |  tddd d d S )Nz\s([^a])r   r5   r   z	\s([^a]*)z bbbbr&   r)   r;   r>   r   r   r   test_not_literal     zRegexTests.test_not_literalc                 C   s4   |  tddd d |  tddd d d S )Nz\s(b)r   r5   r   za\sr   r   r;  r>   r   r   r   test_search_coverage  r=  zRegexTests.test_search_coveragec              
   C   s   d}|  t|| tddD ].}|t|7 }|  tttt|t|d |  ttt|t| d qtt|}|  || d d S )Nr   r      Tr   r   r?  )	r&   r)   escaperangerd   r   r=   r<   r*   )r
   r   ir   r   r   r   test_re_escape  s     zRegexTests.test_re_escapec              	   C   s   d}|  t|| tddD ])}t|g}||7 }|  ttt||d |  tt|| d qtt|}|  || d d S )N    r   r?  Tr   r@  )	r&   r)   rA  rB  bytesr   r=   r<   r*   )r
   r   rC  r   r   r   r   r   test_re_escape_byte  s   
 zRegexTests.test_re_escape_bytec                 C   sl   t jt jkr
|   t jt jkr|   t jt jkr|   t jt j	kr(|   t j
t jkr4|   d S d S r   )r)   rm   
IGNORECASEr,   Lr  r  	MULTILINESr  r]   VERBOSEr>   r   r   r   test_constants  s   zRegexTests.test_constantsc              	   C   s@   t jt jt jt jt jfD ]}| ttt 	d|| j
 qd S )Nz	^pattern$)r)   rm   r  r]   rK  rI  r&   rv   r   r*   rw   )r
   flagr   r   r   
test_flags  s
   zRegexTests.test_flagsc              	   C   s   dD ]j}|  ttd| t|d |  ttd| t|d d |  ttd| t|d d |  ttd| t|d |  ttd	| t|d d |  ttd
| t|d d q| tj| jdd  d S )Nr   r.         @            z\%03oTz\%03o00z\%03o88z\x%02xz\x%02x0z\x%02xzzc                   S      t ddS )Nz\911r   r)   r=   r   r   r   r   rN        z8RegexTests.test_sre_character_literals.<locals>.<lambda>)r&   r   r)   r=   rd   rr   r   r   r
   rC  r   r   r   test_sre_character_literals  s      z&RegexTests.test_sre_character_literalsc              	   C   s   dD ]b}|  ttd| t|d |  ttd| t|d |  ttd| t|d |  ttd| t|d |  ttd| t|d |  ttd| t|d q| tj| jd	d
  d S )NrP  z[\%03o]Tz[\%03o0]z[\%03o8]z[\x%02x]z	[\x%02x0]z	[\x%02xz]c                   S   rZ  )Nz[\911]r   r[  r   r   r   r   rN     r\  z>RegexTests.test_sre_character_class_literals.<locals>.<lambda>)r&   r   r)   r=   rd   rr   r   BAD_OCTAL_ESCAPEr]  r   r   r   !test_sre_character_class_literals  s        "z,RegexTests.test_sre_character_class_literalsc                 C   sR   |  tdddd |  tdddd |  tdddd d S )Nz(a)|(b)r   r5   ra  ra  )r&   r)   r=   startendr<   r>   r   r   r   test_bug_113254  s   zRegexTests.test_bug_113254c                 C   sr   |  tddjd  |  tddjd |  tddjd |  tddjd |  tddjd d S )	Nz(a)?arU   z(a)(b)?br   r5   z(?P<a>a)(?P<b>b)?bz(?P<a>a(b))((a)))r&   r)   r=   	lastindex	lastgroupr>   r   r   r   test_bug_527371  s   zRegexTests.test_bug_527371c                 C   s   |  tj| jdd  d S )Nc                   S   
   t dS )Nzfoo[a-r)   r*   r   r   r   r   rN        
z,RegexTests.test_bug_545855.<locals>.<lambda>)rr   r)   r   BAD_SETr>   r   r   r   test_bug_545855  s   zRegexTests.test_bug_545855c                 C   s   |  tddd d dd |  tddd d	 dd  d
 dd |  tddd d dd |  tddd d dd d S )Nz.*?ci'  r   r   r   i!N  z.*?cdi  r   cdei#N  i N  r   deia  z(a|b)*?c)r&   r)   r=   rd  r;   r>   r   r   r   test_bug_418626  s   zRegexTests.test_bug_418626c                 C   s,   dt d d }| t |odd d S )N[u   ‹]r5   )r)   rA  r&   r*   r
   r   r   r   r   test_bug_612074  s   zRegexTests.test_bug_612074c                 C   s`   |  tddd d d |  tddd d d d |  tddd d d d d S )Nz(x)*iP  r!   r5   z(x)*yr"   z(x)*?yr  r>   r   r   r   test_stack_overflow  s    $zRegexTests.test_stack_overflowc                 C   s   dd }dd }dd }dd }t d	|fd
|fd|fd|fdg}| tt|jdj| j | |dg ddf d S )Nc                 S   s   |S r   r   scannertokenr   r   r   s_ident   rO   z(RegexTests.test_scanner.<locals>.s_identc                 S   s   d| S )Nzop%sr   rw  r   r   r   
s_operator!      z+RegexTests.test_scanner.<locals>.s_operatorc                 S      t |S r   )floatrw  r   r   r   s_float"  r|  z(RegexTests.test_scanner.<locals>.s_floatc                 S   r}  r   )r@   rw  r   r   r   s_int#  r|  z&RegexTests.test_scanner.<locals>.s_intz[a-zA-Z_]\w*z\d+\.\d*rH   z=|\+|-|\*|/)z\s+Nr   zsum = 3*foo + 312.50 + bar)	sumzop=r6   zop*fooop+g     s@r  bar)	r)   Scannerr&   rv   r   rx  ro   rw   scan)r
   rz  r{  r  r  rx  r   r   r   test_scanner  s   
zRegexTests.test_scannerc                 C   sN   dD ]"}|  td| dd d  d |  td| dd d  d qd S )N)r   ?*z
((.%s):)?zrY  )rY  NNa:z)r  za:rU   r  )r
   opr   r   r   test_bug_448951/  s    "zRegexTests.test_bug_448951c                 C   s   |  tddd d  d |  tddd d  d |  tddd d  d |  tddd d  d |  td	dd d  d
 |  tddd d  d |  tddd d  d |  tddd d  d d S )Nz	^((a)|b)*r   )r   r   rU   z^(([ab])|c)*)r   r   r   z^((d)|[ab])*)r   r   Nz^((a)c|[ab])*z^((a)|b)*?c)r   r   rU   z^(([ab])|c)*?dabcd)r  r   r   z^((d)|[ab])*?c)r   r   Nz^((a)c|[ab])*?cr  r>   r   r   r   test_bug_7251068  s    zRegexTests.test_bug_725106c                 C   s<   |  tddd d  d |  tddd d  d d S )Nz(a)(?:(?=(b)*)c)*abbrU   rU   Nz(a)((?!(b)*))*)rU   rU   NNr  r>   r   r   r   test_bug_725149J  s    zRegexTests.test_bug_725149c                 C   s4   G dd dt }t|d}| |dd  d S )Nc                   @   s   e Zd ZdS )z.RegexTests.test_bug_764548.<locals>.my_unicodeN)r   r   r   r   r   r   r   
my_unicodeS  s    r  r   r   )rA   r)   r*   r&   r=   )r
   r  r   r   r   r   test_bug_764548Q  s   zRegexTests.test_bug_764548c                 C   s*   t dd}| dd |D g d d S )Nr   r   c                 S      g | ]}|d  qS r   r   )r   itemr   r   r   r   Y      z,RegexTests.test_finditer.<locals>.<listcomp>r   )r)   finditerr&   )r
   itr   r   r   test_finditerW  s   zRegexTests.test_finditerc                 C   s$   t dt du r|   d S d S )N
bug_926075s
   bug_926075)r)   r*   r,   r>   r   r   r   test_bug_926075[  s   zRegexTests.test_bug_926075c                 C   s$   d}|  t|dg d d S )Nu   [.。．｡]za.b.crU   r   r   )r&   r)   r*   r   r
   ro   r   r   r   test_bug_931848_  s    zRegexTests.test_bug_931848c                    sl   t dd | t  d | t fdd t dd}| |	  d | |	 d  d S )N\sr  r5   r   c                         t  S r   nextr   r  r   r   rN   g  r|  z,RegexTests.test_bug_581080.<locals>.<lambda>)
r)   r  r&   r  r<   assertRaisesStopIterationr*   rx  r;   )r
   rx  r   r  r   test_bug_581080d  s   zRegexTests.test_bug_581080c                    sL   t dd | t  d | t  d | t fdd d S )Nz.*asdfr4  r   r   c                      r  r   r  r   r  r   r   rN   q  r|  z,RegexTests.test_bug_817234.<locals>.<lambda>)r)   r  r&   r  r<   r  r  r>   r   r  r   test_bug_817234m  s   zRegexTests.test_bug_817234c                 C   sX   dd l }dD ]#}| |}| td|d  | td|dd  d qd S )Nr   bBuhHiIlLfds   blarE  r5   r   )arrayr&   r)   r*   r=   )r
   r  typecoderU   r   r   r   test_empty_arrays  s   
"zRegexTests.test_empty_arrayc                 C   s,  t d}t d}t|tjtjB }| t||d t|tjtjB }| t||d td| tj}| t||d td| tj}| t||d td| }| t||d td| }| t||d | ttddd | tddd  d S )	Ni  i  Tz(?i)z(?iu)(?i)ar`   za(?i))rd   r)   r*   rm   r  r&   r   r=   )r
   
upper_char
lower_charr   r   r   r   test_inline_flags{  s    zRegexTests.test_inline_flagsc                 C   s   t d}| |ddd | |ddd | |ddd t dt j}| |ddd	 | |ddd
 | |ddd d S )N$#za
b
za
b#
#za
b
cza
b
c#rP   z#
#za#
b#
#za#
b#
c#)r)   r*   r&   rc   rJ  r  r   r   r   test_dollar_matches_twice  s   
z$RegexTests.test_dollar_matches_twicec                    sP  t dt d | t| jfdd | t| j fdd | t| jfdd | t| jfdd | t| jfdd | t| j fd	d | t| j fd
d | t| j fdd | t| j	dd  | t| j	dd  | t| j
dd  | t| j
dd  | t| j
dd  | t| j
dd  d S )NrI      .c                      
     dS )N   br=   r   r   r   r   rN     rl  z2RegexTests.test_bytes_str_mixing.<locals>.<lambda>c                      r  )Nr   r  r   bpatr   r   rN     rl  c                           ddS Nr  r   rc   r   r  r   r   rN     r\  c                      r  Nr      cr  r   r  r   r   rN     r\  c                      r  )Nr  r  r  r   r  r   r   rN     r\  c                      r  r  r  r   r  r   r   rN     r\  c                      r  r  r  r   r  r   r   rN     r\  c                      r  Nr   r   r  r   r  r   r   rN     r\  c                   S      t dt jS )N   \wr)   r*   r  r   r   r   r   rN     r   c                   S   rj  )Ns   (?u)\wrk  r   r   r   r   rN     rl  c                   S   s   t dt jt jB S )N\w)r)   r*   r  ASCIIr   r   r   r   rN     s   c                   S   r  )Nz(?u)\w)r)   r*   r  r   r   r   r   rN     r   c                   S   r  )N(?a)\wr  r   r   r   r   rN     r   c                   S   rj  Nz(?au)\wrk  r   r   r   r   rN     rl  )r)   r*   rr   	TypeErrorSTR_PAT_ON_BYTESBYTES_PAT_ON_STRSTR_PAT_BYTES_TEMPLBYTES_PAT_STR_TEMPLrs   BYTES_PAT_UNI_FLAGMIXED_FLAGSr>   r   )r  r   r   test_bytes_str_mixing  s    

z RegexTests.test_bytes_str_mixingc                 C   sD  dt jfD ]'}t d|t jB }| t|dd t d|}| t|dd qt dt jt jB }| |dd  t dt j}| |dd  t dt j}| |dd  t d}| |dd  dt jfD ]"}t d|t jB }| |d	d  t d
}| |d	d  qs| t	| j
dd  d S )Nr      À   àTr  u   (?a)Àr        r  c                   S   rj  r  rk  r   r   r   r   rN     rl  z8RegexTests.test_ascii_and_unicode_flag.<locals>.<lambda>)r)   r  r*   rH  r&   r   r=   r  rr   rs   r  )r
   r  r   r   r   r   test_ascii_and_unicode_flag  s&   

z&RegexTests.test_ascii_and_unicode_flagc                 C   s   t dd}|s| d n|r"|d |dks"|d |dkr'| d |s0| d d S |d d  dkrH| dt|d d   d S d S )	N(?<a>\w)xyz(Failed: expected match but returned Noner   r5   Failed)r!   r!   z0Failed: expected "('x', 'x')" but got {} instead)r)   r=   r,   r   formatasciir
   rM   r   r   r   test_subscripting_match  s   (
 z"RegexTests.test_subscripting_matchc                 C   sJ   t dd}t dd}|r|r|d d  |d d  ks#| d d S d S )Nz	(?P<a>\w)r!   r  r  )r)   r=   r,   )r
   m0m1r   r   r   test_new_named_groups  s
    z RegexTests.test_new_named_groupsc           	      C   s  |  tddd  |  tddd  |  tddd  |  ttddd |  ttdd	d |  ttd
dd |  ttddd |  tddd  |  td
dd  |  tddd  |  tdd	d  |  tddd  |  tddd  |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttd dd |  ttd!dd |  ttd"dd |  ttd#dd |  ttd$dd |  ttd%dd |  ttd&dd |  ttd'dd |  ttd(dd |  ttd)dd |  ttd*dd |  ttd+dd |  ttd,dd |  ttd-dd |  ttd.d/d |  ttd0d1d |  ttddd |  td.d2d  |  td0d2d  |  tdd2d  |  td3d/d  |  td4d1d  |  td5dd  |  ttd3d2d |  ttd4d2d |  ttd5d2d |  ttd6dd |  ttd6d7d |  ttd8dd |  ttd9d7d |  ttd:d7d |  ttd:dd |  ttdd/d |  ttdd7d |  ttdd;d |  td<d d= |  td<d> d? |  td<d@g dA |  tdBd@dCdDg |  td<dEg dF |  ttd9d7d dG}dH}tdI }g d|dJfdK|dJfd5|dLfdM|dLfd.|dNfdO|dNfd3|dPfdQ|dPfdR|dSfdT|dUfdV|dWfdX|dYfdZ|d[fd\|d]fd^d_d`dad|dbfdc|dbfd|ddfde|ddfd|dffdg|dffd|dhfdi|dhfdj|dkfdl|dmfdn|dofdp|dqfdr|dsfdt|dufd|dbfdv|dbfdw|ddfdx|ddfdy|dffdz|dffd{|dhfd||dhfd}|dkfd~|dmfd|dofd|dqfd|dsfd|duf}|D ]?\}}}z|d d t|||kr$| 	d
| W q tyE } z| 	d
|t| W Y d }~qd }~ww |  ttdd/d |  ttddd |  ttddd d S )Ns   (?ai)r  s	   (?ai)\xC0s   (?a)\wr  r  Ts   (?L)\d   0s   (?L)\s    s   (?L)\w   a   ?s   (?L)\Ds   (?L)\Ss   (?L)\Wz\p{Cyrillic}u   Аz(?i)\p{Cyrillic}z\p{IsCyrillic}z\p{Script=Cyrillic}z\p{InCyrillic}z\p{Block=Cyrillic}z[[:Cyrillic:]]z[[:IsCyrillic:]]z[[:Script=Cyrillic:]]z[[:InCyrillic:]]z[[:Block=Cyrillic:]]z\P{Cyrillic}r`   z\P{IsCyrillic}z\P{Script=Cyrillic}z\P{InCyrillic}z\P{Block=Cyrillic}z\p{^Cyrillic}z\p{^IsCyrillic}z\p{^Script=Cyrillic}z\p{^InCyrillic}z\p{^Block=Cyrillic}z[[:^Cyrillic:]]z[[:^IsCyrillic:]]z[[:^Script=Cyrillic:]]z[[:^InCyrillic:]]z[[:^Block=Cyrillic:]]z\drW  r  r   r  z\Dz\Sz\Wz\p{L}rU   z\p{Lu}\p{Ll}r  r"  \Xr      àr&     aààeéérU   r  r  e   éu   é\X{3}   aàà   eéé   
́Ári   u   ́u   Áu   -09AZaz_Γγs   -09AZaz_z#Ll Lm Lo Lt Lu Mc Me Mn Nd Nl No Pcu   09AZaz_Γγz
[[:word:]]r   z[[:^word:]]09z[[:digit:]]u
   -AZaz_Γγz[[:^digit:]]z[[:alpha:]]u   AZazΓγz[[:^alpha:]]z-09_z[[:alnum:]]u
   09AZazΓγz[[:^alnum:]]z-_z[[:xdigit:]]09Aaz[[:^xdigit:]]u   -Zz_Γγ)z\p{InBasicLatin}   aárU   )z\P{InBasicLatin}r     á)z(?i)\p{InBasicLatin}r  rU   )z(?i)\P{InBasicLatin}r  r  s   09AZaz_s   (?L)[[:word:]]   -s   (?L)[[:^word:]]s   09s   (?L)[[:digit:]]s   -AZaz_s   (?L)[[:^digit:]]s   (?L)[[:alpha:]]s   AZazs   (?L)[[:^alpha:]]s   -09_s   (?L)[[:alnum:]]s   09AZazs   (?L)[[:^alnum:]]s   -_s   (?L)[[:xdigit:]]s   09Aas   (?L)[[:^xdigit:]]s   -Zz_s   (?a)[[:word:]]s   (?a)\Ws   (?a)[[:^word:]]s   (?a)\ds   (?a)[[:digit:]]s   (?a)\Ds   (?a)[[:^digit:]]s   (?a)[[:alpha:]]s   (?a)[[:^alpha:]]s   (?a)[[:alnum:]]s   (?a)[[:^alnum:]]s   (?a)[[:xdigit:]]s   (?a)[[:^xdigit:]]r   z
Failed: {}zFailed: {} raised {}z\p{NumericValue=0}z\p{NumericValue=1/2}   ½z\p{NumericValue=0.5})r&   r)   r=   r   r<   r+   setr   r  r,   r  	Exceptionr  )	r
   chars_uchars_bword_settestsro   charsexpectedr  r   r   r   test_properties  sZ  

	
 !#$%&'()*+,-./02 $zRegexTests.test_propertiesc                 C   sb   |  tdddg |  tddddg |  tddg d |  td	dg d
 d S )N\w+u    हिन्दी,   हिन्दीz\W+r   ,r   )r   r  r  z(?V1)\B)r   u    हu   िu   नu   ्u   दu   ी,r   )r&   r)   r+   r   r>   r   r   r   test_word_class  s(   



zRegexTests.test_word_classc                 C   s   |  tddddg d S )N\G\w{2}abcd efr   r   r   r>   r   r   r   test_search_anchor  r   zRegexTests.test_search_anchorc              	   C   s  |  tddg d |  tjddddg d |  tdddd	g |  tjddddg d
 |  tjddddddg |  dd tddD g d |  dd tjddddD g d
 |  dd tddD g d |  dd tjddddD g d
 |  tddg d |  tddg d |  tddg d |  tddg d |  dd tddD g d |  dd tddD g d |  dd tddD g d |  dd tddD g d |  tdd d!d"g |  td#d$d!d"g |  td%d g  |  td&d d'g |  td(d)g d* |  td+d)g d* |  td,d)g d- |  td.d)g d- |  tjd/d$d0d1d2d3d4g |  tjd/d$d0d5d2d3d4g |  d6d tjd/d$d0d1d2D d3d4g |  d7d tjd/d$d0d5d2D d3d4g |  d8d tjdd$d0d1d2D d4d3g |  d9d tjdd$d0d5d2D d4d3g |  tjdd$d0d1d2d4d3g |  tjdd$d0d5d2d4d3g |  td:d;tjd<d=g |  td>d;tjd=d<g |  td?dd	g |  tjd?dddd	d!g |  td@dAdBdCg |  tdDdAdEdFg |  dGd td?dD d	g |  dHd tjd?dddD d	d!g |  dId td@dAD dJdKg |  dLd tdDdAD dMdNg |  tdOdO dP |  tdQdO dP |  tdRdS dP |  tdTdS dP |  tdUdVdd |  tdWdVdd d S )XNz(?r).r   )r   r   rU   T
overlapped(?r)..abcderp  r   rp  r   r   r   (?r)(.)(-)(.)a-b-cr   r   r   rU   r   r   c                 S   r  r  r   r   r   r   r   r     r  z2RegexTests.test_search_reverse.<locals>.<listcomp>c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r     r  ^|\w+foo barr   r  r  
(?V1)^|\w+	(?r)^|\w+r  r  r   (?rV1)^|\w+c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r     r  r  r  r   r   z.{2}(?<=\G.*)r  z(?r)\G\w{2}z(?r)\w{2}\Gefzq*qqwe)qqr   r   r   z(?V1)q*z(?r)q*)r   r   r  r   z(?rV1)q*rI   r5   r6   r  r  r   r   ra  c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r     r  z[ab]aBrU   Bz(?r)[ab]z(?r).{2}(\w+) (\w+)zfirst second third fourth fifthr   )thirdfourthz(?r)(\w+) (\w+))r!  fifth)r   r   c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r   	  r  c                 S   r  r  r   r   r   r   r   r     r  r   zthird fourthc                 S   r  r  r   r   r   r   r   r     r  zfourth fifthzsecond thirdr   r2  z
(?r)abcdefz
(?i)abcdefABCDEFz(?ir)abcdef(.)r   (?r)(.))r&   r)   r+   r  rm   r;   r<   rc   r>   r   r   r   test_search_reverse  s  ""

zRegexTests.test_search_reversec                 C   s   |  tddd  d S )Nz(?>a*)ar   r;  r>   r   r   r   test_atomic  s   zRegexTests.test_atomicc                 C   sd  |  tdd d |  tdd d |  tdd d |  tdd d |  td	d
 d |  tdd d |  tdd d |  tdd d |  tddd  |  tddd  |  tddd  |  tddd  |  tdd
d  |  tddd  |  tddd  |  tddd  d S )Nza?arU   r   za*ar7   r9   za+aza{1,3}az	(?:ab)?abr   r&  z	(?:ab)*ababababr2  z	(?:ab)+abz(?:ab){1,3}abza?+aza*+aza++aza{1,3}+az
(?:ab)?+abz
(?:ab)*+abz
(?:ab)++abz(?:ab){1,3}+abr&   r)   r;   r<   r>   r   r   r   test_possessive  s    zRegexTests.test_possessivec                 C   s  t jdkr| tddg d n| tdddg | tddg d | tddg d | d	d
 tddD g d | tddg d | dd
 tddD g d | tddg d | dd
 tddD g d | tddg d | dd
 tddD g d t jdkr| tddg d | dd
 tddD g d n| tdddg | dd
 tddD dg t jdkr| tddg d | dd
 tddD g d n| tdddg | dd
 tddD dg | tddg d | dd
 tddD g d | tddg d | dd
 tddD g d d S )Nr   z\br  )r   rU   r   r   r   r   r  r  r  c                 S   r  r  r   r   r   r   r   r   E  r  z-RegexTests.test_zerowidth.<locals>.<listcomp>r  r  c                 S   r  r  r   r   r   r   r   r   I  r  r  c                 S   r  r  r   r   r   r   r   r   M  r  r  c                 S   r  r  r   r   r   r   r   r   Q  r  r   r   )r   r!   rU   r!   r   r!   r   r   c                 S   r   r   r   r   r   r   r   r   W  rp   c                 S   r   r   r   r   r   r   r   r   [  rp   z(?r))r   r   r!   r   r!   rU   r!   r   c                 S   r   r   r   r   r   r   r   r   a  rp   c                 S   r   r   r   r   r   r   r   r   e  rp   z(?V1)c                 S   r   r   r   r   r   r   r   r   j  rp   z(?rV1)c                 S   r   r   r   r   r   r   r   r   o  rp   )r   r   r&   r)   r   r+   r  r   r>   r   r   r   test_zerowidth8  s\   

$
"&zRegexTests.test_zerowidthc                 C   s   |  tdd d |  tdd d |  tddd  |  tddd  |  tddd  |  tjddtjd	d  |  tjd
dtjd	d  |  tjddtjd	 d d S )Nz(?i)Abr   r&  z(?i:A)bzA(?i)bz(?V0)Abz(?V1)Abz(?-i)Abr  z(?-i:A)bzA(?-i)b)r&   r)   r;   r<   rm   r>   r   r   r   test_scoped_and_inline_flagsr  s   z'RegexTests.test_scoped_and_inline_flagsc                 C   sL   |  tdd d |  tdd d |  tdd d d S )Nz(?:a+)+r7   r9   z(?:(?:ab)+c)+abcabcr2  z
(?:a+){2,}r)  r>   r   r   r   test_repeated_repeats  s   z RegexTests.test_repeated_repeatsc                 C   sD  |  tdd d |  tddd  |  tddd  |  tdd d |  ttddd |  td	dd  |  ttd
dd |  tddd  |  tddd  |  tddd  |  ttddd |  tddd  |  ttddd |  ttddd |  tddd  |  ttddd |  tddd  |  ttddd |  tddd  |  tddd  |  tddd  |  ttddd |  ttddd |  tddd  |  ttddd |  tttd| j	 d S )Nz123(?<=a\d+)a123r5   r   b123z123(?<!a\d+)z(a)b(?<=b)(c)r   Tz(a)b(?<=c)(c)z(a)b(?=c)(c)z(a)b(?=b)(c)z(?:(a)|(x))b(?<=(?(2)x|c))cz(?:(a)|(x))b(?<=(?(2)b|x))cz(?:(a)|(x))b(?<=(?(2)x|b))cz(?:(a)|(x))b(?<=(?(1)c|x))cz(?:(a)|(x))b(?<=(?(1)b|x))cz(?:(a)|(x))b(?=(?(2)x|c))cz(?:(a)|(x))b(?=(?(2)c|x))cz(?:(a)|(x))b(?=(?(1)b|x))cz(?:(a)|(x))b(?=(?(1)c|x))cz(a)b(?<=(?(2)x|c))(c)z(a)b(?<=(?(2)b|x))(c)z(a)b(?<=(?(1)c|x))(c)z(a)b(?<=(?(1)b|x))(c)z(a)b(?=(?(2)x|c))(c)z(a)b(?=(?(2)b|x))(c)z(a)b(?=(?(1)c|x))(c)z(a)\2(b))
r&   r)   r;   r<   r   r=   rv   r   r*   rw   r>   r   r   r   test_lookbehind  s   zRegexTests.test_lookbehindc                 C   s   t jdkr| tdddd n| tdddd | tdddd t jdkr8| tdddd	 n| tdddd
 | tdddd	 t jdkr_| tdddd n| tdddd | tdddd d S )Nr   z(?V0)(x)?(y)?z\2-\1r  zy-x-zy-xz(?V1)(x)?(y)?r!   z-x-z-xr"   zy--zy-r   r>   r   r   r   test_unmatched_in_sub  s    


z RegexTests.test_unmatched_in_subc                 C   s   t d}tjdkr| |dd dd n| |dd dd | d	d
 |dD ddg t d}| |dd dd | dd
 |dD ddg d S )NzD(?mV0)(?P<trailing_ws>[ \t]+\r*$)|(?P<no_final_newline>(?<=[^\n])\Z)r   c                 S      d| j  d S N<>rh  rL   r   r   r   rN     rq   z+RegexTests.test_bug_10328.<locals>.<lambda>zfoobar )z%foobar<trailing_ws><no_final_newline>r   c                 S   r4  r5  r8  rL   r   r   r   rN     rq   )zfoobar<trailing_ws>r5   c                 S      g | ]}|  qS r   r   r   r   r   r   r     r  z-RegexTests.test_bug_10328.<locals>.<listcomp>r   r   zD(?mV1)(?P<trailing_ws>[ \t]+\r*$)|(?P<no_final_newline>(?<=[^\n])\Z)c                 S   r4  r5  r8  rL   r   r   r   rN     rq   c                 S   r9  r   r:  r   r   r   r   r     r  )r)   r*   r   r   r&   r   r  rt  r   r   r   test_bug_10328  s0   



zRegexTests.test_bug_10328c                 C   sd  |  tddddg |  tjddddg d |  tddd	d
g |  tjddddg d |  tjddddddg |  dd tddD ddg |  dd tjddddD g d |  dd tddD d	d
g |  dd tjddddD g d |  dd tjddddD ddg |  dd tjddddD ddg d S )N..r  r   r   Tr	  )r   r   r   rp  r  rp  r   r  z	(.)(-)(.)r  r  r  c                 S   r  r  r   r   r   r   r   r     r  z.RegexTests.test_overlapped.<locals>.<listcomp>c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r     r  c                 S   r  r  r   r   r   r   r   r     r  c                 S   r9  r   r  r   r   r   r   r     r  c                 S   r9  r   r=  r   r   r   r   r     r  r  )r&   r)   r+   r  r>   r   r   r   test_overlapped  sF   zRegexTests.test_overlappedc                 C   s>   |  tddg d |  dd tddD g d d S )Nr  za,b,,c,)rU   r   r   r   r   c                 S   r   r   r   r   r   r   r   r     rp   z-RegexTests.test_splititer.<locals>.<listcomp>)r&   r)   r   r   r>   r   r   r   test_splititer  s   &zRegexTests.test_splititerc                 C   s|   |  tdd d |  tdd d |  tddg d |  tddd	d
g |  tddg d d S )Nr  r  r   r  r&  r  r  r  r  r  r  r  )r&   r)   r=   r<   r+   r>   r   r   r   test_grapheme  s   

zRegexTests.test_graphemec                 C   s   d}|  td|g d |  td|g d d}|  td|g d |  td|g d d}|  td|g d	 |  td|g d
 d S )Nz4The quick ("brown") fox can't jump 32.3 feet, right?r   )r   Ther   quickz ("brownz") foxr   can'tr   jumpr   32rI   3r   feet, rightr  z(?V1w)\b)r   rA  r   rB  r   r   "rC  rN  )r   rD  r   can'tr   rH  r   z32.3r   rK  r  r   rM  r  r   zThe  fox)r   rA  z  rD  r   zcan't aujourd'hui l'objectif)r   rE  rF  rG  r   aujourdrF  huir   lrF  objectifr   )r   rP  r   zaujourd'huir   z
l'objectifr   )r&   r)   r   r
   textr   r   r   test_word_boundary  s   zRegexTests.test_word_boundaryc                 C   s  |  tddddg |  tdddg |  tddddg |  td	dddg |  td	dddg |  td	dddg |  td
d d |  td
dd  |  td
dd  |  tdd d |  tddd  |  tddd  |  tdd d |  tdd d |  tddd  |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tddd  |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tddd  |  tdd d |  tdd d |  tdd d d S )Nz.+zLine 1
Line 2
zLine 1zLine 2zLine 1Line 2zLine 1
Line 2
zLine 1zLine 2z(?w).+^abcr   r   z
abczabcz(?w)^abcabc$zabc
zabcz(?w)abc$(?m)^abcr5   z	(?mw)^abc(?m)abc$z	(?mw)abc$)r&   r)   r+   r;   rc  r>   r   r   r   test_line_boundary   sT   zRegexTests.test_line_boundaryc                 C   s@  |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d	 |  tdd
 d |  tdd d	 |  tdd
 d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd dgdgd |  tdd d |  tdd d d!gg d d S )"Nz(?:(a)|(b))(c)r   r   r   r  z(?:(?<a>a)|(?<b>b))(?<c>c)z!(?<a>a)(?:(?<b>b)|(?<c>c))(?<d>d)r   )rU   r   Nr   acd)rU   Nr   r   z(a)(?:(b)|(c))(d)z(a)(?|(b)|(b))(d))rU   r   r   z(?|(?<a>a)|(?<b>b))(c)z(?|(?<a>a)|(?<a>b))(c))rU   r   )r   r   z$(?|(?<a>a)(?<b>b)|(?<b>c)(?<a>d))(e)abe)rU   r   r  ro  )r   r   r  z (?|(?<a>a)(?<b>b)|(?<b>c)(d))(e)z(?|(?<a>a)(?<b>b)|(c)(d))(e))r   r   r  z (?|(?<a>a)(?<b>b)|(c)(?<a>d))(e)rU   r   )rU   r   )r   Nr  r   r   )r&   r)   r=   r  capturesdictr>   r   r   r   test_branch_resetJ  s   













zRegexTests.test_branch_resetc                 C   s  |  tdd d |  tdd d |  tdd d |  tdd d |  tdd	d
d |  tdddg |  tdddg |  tddddg |  tddddg |  tddddg |  tddddg |  tddg d |  tddg d |  tdddg |  tdddg |  tdddg |  tdddg |  d td!d"d# |  d td$d"d% |  d td&d'd( |  d td)d*d+ |  d td,d*d+ |  d td-d.d* d d/d0 td1D }|  ttd2|d3 |  ttd4|d5 |  ttd6|d7 |  ttd8|d9 |  ttd:|d9 |  ttd;|d7 |  ttd<|d= |  ttd>|d? |  ttd@|dA |  ttdB|dC |  ttdD|dC |  ttdE|dF |  ttdG|dH |  ttdI|dH |  t	t
tdJ| j |  tdKdLddMg |  tdNdLddMg |  tdOdLddMg |  tdPdLddMg d S )QNz[a]rU   r   z(?i)[a]r`   z[a-b]z	(?i)[a-b]z(?V0)([][])r   za[b]cr  z[\p{Alpha}]a0z(?i)[\p{Alpha}]A0z[a\p{Alpha}]ab0r   z[a\P{Alpha}]rW  z(?i)[a\p{Alpha}]z(?i)[a\P{Alpha}]z[a-b\p{Alpha}]abC0)rU   r   Cz(?i)[a-b\p{Alpha}]AbC0)r`   r   re  z[\P{Alpha}]z[^\p{Alpha}]z[^\P{Alpha}]r   z[^\d-h]za^b12c-hza^bcz[^\dh]za^bc-z	[^h\s\db]z	a^b 12c-hza^c-z[^b\w]r  r   z[^b\S]z[^8\d]za 1b2c                 s       | ]}t |V  qd S r   rd   r   r   r   r   r   	<genexpr>      z&RegexTests.test_set.<locals>.<genexpr>r?  z	\p{ASCII}rU  z
\p{Letter}u   z	\p{Digit}rX   z(?V1)[\p{ASCII}&&\p{Letter}]4   z'(?V1)[\p{ASCII}&&\p{Alnum}&&\p{Letter}]z&(?V1)[\p{ASCII}&&\p{Alnum}&&\p{Digit}]z(?V1)[\p{ASCII}&&\p{Cc}]!   z(?V1)[\p{ASCII}&&\p{Graph}]^   z(?V1)[\p{ASCII}--\p{Cc}]_   z[\p{Letter}\p{Digit}]rT  z(?V1)[\p{Letter}||\p{Digit}]z\p{HexDigit}   z(?V1)[\p{HexDigit}~~\p{Digit}]r[   z(?V1)[\p{Digit}~~\p{HexDigit}]z(?V0)([][-])z(?V1)[[a-z]--[aei]]r   r   z(?iV1)[[a-z]--[aei]]z(?V1)[\w--a]z(?iV1)[\w--a])r&   r)   r=   r<   rc   r+   r  rB  lenrv   r   r*   rw   )r
   	all_charsr   r   r   test_set  s   zRegexTests.test_setc              
   C   s^'  g dddt j| jfdddt j| jfdddt j| jfdddt j| jfdddt j| jfddd	td
fdddt j| jfdddt j| jfdddt j| jfdddt j| jfdd
d	td
fddd	td
fdddtd fddd	td
fdddtd fdddt j| jfdd
d	td
fddd	td
fdd
dt j| jfddtdd dttdd fdd
dtd
fddd td!fd"d#dtd#fd$d#dtd#fd%d#dtd#fd&d#dtd fd'd(dtd(fd)d(dtd(fd*d+dttd,fd-d+dtd fd.d/dtd fd0d1dtd fd2d+dtd fd3d4dtd4fd5d4dtd4fd6d7dttd8td9 td: td; td< td= fd>d?dtd?fd@dAdtdBfdCdDdtdDfdCdEdtd fdFdGdtd fdHdGdtd fdCdIdtdIfdJdEdtd fdKdEdtdEfdLdGdtd fdMdGdtdGfdNdGdtdGfdOddt j| j	fdPdQdQdtdQfdQdRdtd fdQdSdtd fdQdTdtd fdQdUdtdQfdQdVdtdQfdWdQdtdQfdXdQdtdQfdXdYdtdYfdXdZdtdZfd[dYdtdYfd[dQdtd fd[d\dtd fd[dZdtdZfd]dYdtdYfd]dQdtdQfd]dZdtd fd^dQdtdQfd_dQdtdQfd_d`dtd fdad`dtdQfd_dbdtd fdcdbdtdQfdddQdtdfdedQdtdfdfdQdtdQfdfdSdtdSfdgdhdtdhfdgdidtd fdjdQdtd fdjdkdtdkfdldkdtd fdldmdtdmfdndodtdpfdqdrdtdrfdsdrdtdrfdtdrdtdrfdudvdt j| j
fdwdvdt j| j
fdxdvdt j| jfdydvdt j| j	fdzdvdt j| jfd{d{dtd{fd|d}dtd}fd|d}dtd}fd~ddtdfd~dkdtd fdddtdfdddtd fdddtd fdddtdfddrdtd
fdddtd
fdddtd
fdddtd fdddtd fdddtd fdddtd fdddtdfdddtdfdddtd fdddtd fddrdtd fdddtd fdddtd fdddtd fdddtd fdddtdfdddtdfdddtdfddQdtdfdddtdfdddtdfdddtd fdddtdfdddtdfdddtdfdddtdfddQdtdfddQdtdfdddtdQfdddtdfdddtdfdddtdfddvdt j| j	fdddtdfdQddtd fdddtdfdddtdfdddtdfdddtdfdddtdfdddtd
fdddtdăfdddtdƃfdddtd fdddtdfdddtd˃fddQdtd̓fddQdtdσfdddtdуfdddtdуfdddtdԃfdddtdփfdddtd fddQdtdكfdddtd܃fdddtdރfdddtdfdddtdfdddtdfdddtd fdddtd fdddtdfdd
dtd
fdddtd fdddtdfdddtdfdddtdfdddtd fddpdtdpfddd	tdQfddd	tdQfddd	tdfdddtdfd ddtd fdddtdfdddtdfdddtdfdddtdfdddtdfdd	dtd
fdd	dtd
fdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtd fd!d"dtd#fd!d$dtd%fd&d'dtd(fd&dQdtd fd)d'dtd*fd+dodtd,fd-ddt j| jfd.dd/td0fd1dd/td2fd3ddt j| jfd4d5dtd5fd6d5dt j| jfd7d8dtd8fd7d8dtd9fd:d;dtd;fd<d
dtd
fd=d>dtd>fd?d
dtd
fd@dAdtdAfdBd>dtd>fdQdQdtdQfdQdRdtd fdQdSdtd fdQdTdtd fdQdUdtdQfdQdVdtdQfdWdQdtdQfdXdQdtdQfdXdYdtdYfdXdZdtdZfdCdZdtdZfd[dYdtdYfd[dQdtd fd[d\dtd fdDd\dtd fd[dZdtdZfdDdZdtdZfdEdZdtdZfdFdZdtdZfdGdZdtd fd]dYdtdYfd]dQdtdQfdHdQdtdQfd]dZdtd fd^dQdtdQfdIdQdtdQfd_dQdtdQfd_d`dtd fdad`dtdQfd_dbdtd fdcdbdtdQfdddQdtdfdedQdtdfdfdQdtdQfdfdSdtdSfdgdhdtdhfdgdidtd fdjdQdtd fdjdkdtdkfdldkdtd fdldmdtdmfdndodtdpfdqdrdtdrfdtdrdtdrfdJdvdt j| jfdudvdt j| j
fdwdvdt j| j
fd{d{dtd{fd|d}dtd}fd~ddtdfd~dkdtd fdddtdfdddtd fdddtd fdddtdfddQdtdfdddtdfdddtdfdKdvdt j| jfdLdvdt j| jfdddtd fdxdvdt j| jfdddtdfdddtdfdddtdfdddtdfdydvdt j| j	fdzdvdt j| jfddQdtdfddQdtdfdddtdQfdMddtdQfdNdvdt j| jfdOddtdQfdddtdfdPddtdfdddtdfdQddtdfdddtdfdRddtdfddvdt j| j	fdddtdfdQddtd fdddtdfdSdTdtdUfdVddtdWfdddtdfdddtdfdddtdfdddtdfdddtd
fdddtdăfdddtdƃfdddtd fdddtdfdddtd˃fddQdtd̓fddQdtdσfdddtdуfdddtdуfdddtdԃfdddtdփfdddtd fddQdtdكfdddtd܃fdddtdރfdddtdfdddtdfdddtdfdddtd fdddtd fdddtdfdXd
dYtd
fdZddtdfd[ddt j| jfd\ddt j| jfdd
dtd
fdddtd fdddtdfdddtdfdddtdfdddtd fddpdtdpfddd	tdQfddd	tdQfd]d^dtd^fd]d_dtd fd]d`dtd fd]dadtd fd]dbdtd^fd]dcdtd^fddd^dtd^fded^dtd^fdedfdtdffdgdhdtdhfdidhdtdhfdjdfdtdffdkd^dtd fdkdldtd fdmdldtd fdkdhdtdhfdndhdtdhfdodhdtdhfdpdhdtdhfdqdhdtd fdrdfdtdffdrd^dtd^fdsd^dtd^fdrdhdtd fdtd^dtd^fdud^dtd^fdvd^dtd^fdvdwdtd fdxdwdtd^fdvdydtd fdzdydtd^fd{d^dtdfd|d^dtdfd}d^dtd^fd}d`dtd`fd~ddtdfdddtd fdd^dtd fdddtdfdddtd fdddtdfdddtdfdddtdfdddtdfddvdt j| jfddvdt j| j
fddvdt j| j
fdddtdfdddtdfdddtdfdddtd fdddtdfdddtd fdddtd fdddtdfdd^dtdfdddtdfdddtdfddvdt j| jfddvdt j| jfdddtd fddvdt j| jfdddtdfdddtdfdddtdfdddtdfddvdt j| j	fddvdt j| jfdd^dtdfdd^dtdfdddtd^fdddtd^fddvdt j| jfdddtd^fd~ddtd^fdddtd^fdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtdfddvdt j| j	fdÐddtdăfd]ddtd fdddtdfdƐddtdȃfdɐddtdʃfdːddtd̃fd͐ddtdσfdАddtdуfdҐddtdfdҐddtdfdՐddtd׃fdؐddtdكfdڐddtd fdېddtdfdݐddtdރfdߐd^dtdfdd^dtdfdddtdfdddtdfdddtdfdddtdfdddtd fdd^dtdfdddtdfdddtdfdddtdfdddtdfdddtdfdddtd fdddtd fdddtdfdddYtdfdddtdfdddtdfd dd	tdfddd	tdfdddtd fdddtdfdddtd	fd
ddtdfdddtd fdddtdfddd	td^fddd	td^fdddtdfdddtdfdddtdfddmd	tdfddmd	tdfddmd	tdfddmdtdfddd	tdfdd d	td!fd"d#d	td$fd%d&dt j| jfd'd(dtd(fd)d*dtd fd)d&dtd&fd+d*dtd*fd,d(dtd(fdad-dtd fd.d-dtdQfd/d0dtdQfdCdEdtd fdKdEdtdEfd1d2dtd3fd4d2dtd3fd5d6dtdQfd7d6dtdQfd8d9dtd9fd:d;d<td=fd>d;d<td=fd?d@dAtdBfdCddt j| jfdDdEdtdkfdFddt j| jfdGdHdtdHfdIddtdfdJdKdtd fdLdKdtdKfdMdKdtdKfdNdOdtdPfdQdRdtdRfdSdTdtdTfdUdVdtdVfdUdWdtdWfdXdYd	tdfdZd[dtd[fd\d[dtd[fd]d[dtd[fd^d[dtd[fd_d`dtd`fdadbdtd fdcdddtd fdedKdtd fdfddAtdgfdhdQdtdifdjdQdtdifdkdQdtdifdld
dtd
fdldmdtdmfdndmdtdmf}|D ]}d }zt|dokr|\}}}}n|\}}}}}W n* ty1   dpdqdr |d ds D dtg }| du| Y qw g }	|rZ|dvD ]}
z
|	t|
 W q= tyY   |	|
 Y q=w |d ur| j||dw | ||t j|| W d    n	1 s}w   Y  qt ||}|r|	rt|j|	 }nt|d d  }nt|}| || qd S (x  Nz(?P<foo_123r   z(?P<1>a)z(?P<!>a)z(?P<foo!>a)z(?P<foo_123>a)(?P=foo_123r   z(?P<foo_123>a)(?P=1)1rU   z(?P<foo_123>a)(?P=0)z(?P<foo_123>a)(?P=-1)z(?P<foo_123>a)(?P=!)z(?P<foo_123>a)(?P=foo_124)z(?P<foo_123>a)z(?P<foo_123>a)(?P=foo_123)z(?<foo_123>a)\g<foo_123z(?<foo_123>a)\g<1>z(?<foo_123>a)\g<!>z(?<foo_123>a)\g<foo_124>z(?<foo_123>a)z(?<foo_123>a)\g<foo_123>r   )[\1]r{   rW  z'\x01'r   r   9rW  z\141z((a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\119abcdefghijklk9z0,11)rx  kry   rz   z[\0a]z[a\0]z[^a\0]z\a[\b]\f\n\r\t\vz
	z[\a][\b][\f][\n][\r][\t][\v]z\xffr   rV  z\x00ffffffffffffffz\x00fz\x00fe   þz\x00ffz\t\n\v\r\f\a\gz	
gz	
\gz\t\n\v\r\f\arV   rW   rX   rY   rZ   r[   r\   z[\t][\n][\v][\r][\f][\b]z	
z^\w+=(\\[\000-\277]|[^\n\\])*z(SRC=eval.c g.c blah blah blah \\
	apes.cz SRC=eval.c g.c blah blah blah \\r  acbr  r  zacc
ccbza.{4,5}bzabza.b(?s)z(?s)a.bza.*(?s)bz(?s)a.*bz(?s)a.{4,5}brO  )r   r   rW  z''r   xbcaxcabxxabcyababczab*czab*bcabbcabbbbczab+bcabqzab?bczab?cr  abccrX  aabcrY  ^r  za.cza.*caxyzcaxyzdza[bc]dr   za[b-d]eaceza[b-d]aacr   za[-b]a-za[\-b]za[b-]za[]br   za[za\zabc)z(abcza]za[]]bza]bza[^bc]daedza[^-b]cadcza-cza[^]b]cza]cz\ba\b-az-a-z\by\br  yzr   zx\bzx\Br!   z\BzrY  zz\Bz\Bxz\Ba\Bz\By\Bz\By\br"   z\by\Bzab|cdr   r  z()efdefz0,1)r  r   z$br   za\(ba(b)r  za\(*bza((bza\\bza\brf  z0,1,2)rU   rU   rU   z(a)b(c))r   rU   r   za+b+caabbabcz(a+|b)*)r   r   z(a+|b)+z(a+|b)?r   z)(z[^ab]*ro  r/   z	a|b|c|d|er  z(a|b|c|d|e)fr  )r  r  zabcd*efgabcdefgzab*	xabyabbbzxayabbbzz(ab|cd)er  )ro  r   z[abhgefdc]ijhijz	^(ab|cd)ez(abc|)efr   z(a|b)c*d)bcdr   z
(ab|ab*)bc)r   rU   z
a([bc]*)c*)r   r   za([bc]*)(c*d))r  r   r   za([bc]+)(c*d)za([bc]*)(c+d))r  r   r   za[bcd]*dcdcdeadcdcdeza[bcd]+dcdcdez	(ab|a)b*c)r   r   z((a)(b)c)(d)z1,2,3,4)r   rU   r   r   z[a-zA-Z_][a-zA-Z0-9_]*alphaz^a(bc+|b[eh])g|.h$abh)bhNz(bc+d$|ef*g.|h?i(j|k))effgz)r  r  Nij)r  r  jeffgbcddreffgzz(((((((((a)))))))))zmultiple words of textzuh-uhzmultiple wordszmultiple words, yeahz	(.*)c(.*))r  r   rp  z\((.*), (.*)\)z(a, b)z2,1)r   rU   z[k]za[-]?cz(abc)\1r-  z
([a-c]*)\1z^(.+)?BABr`   z(a+).\1$r   )r   r   z	^(a+).\1$aaaa)r-  r   z
([a-c]+)\1z(a)\1)r   rU   z(a+)\1z(a+)+\1z(a).+\1r   )r   rU   z(a)ba*\1z
(aa|a)a\1$r7   )r7   rU   z
(a|aa)a\1$z(a+)a\1$z
([abc]*)\1z
(a)(b)c|ab)r   NNz(a)+xaaax)r  rU   z([ac])+xaacx)r  r   z([^/]*/)*sub1/zd:msgs/tdir/sub1/trial/away.cpp)zd:msgs/tdir/sub1/ztdir/z([^.]*)\.([^:]*):[T ]+(.*)track1.title:TBlah blah blahz0,1,2,3)r  track1titlezBlah blah blahz	([^N]*N)+abNNxyzN)r  xyzNabNNxyz)abNNNz	([abc]*)xabcx)r  r   z	([xyz]*)x)r!   r   z	(a)+b|aac)r  Nz(?P<i d>aaa)az(?P<id>aaa)az0,id)r  r7   z(?P<id>aa)(?P=id))r  r   z(?P<id>aa)(?P=xd)r   gz\g<1>z(.)\g<1>gg)r  r  z\Nr  \N{LATIN SMALL LETTER A}z\pr   r  z\PPz\P{Lu}zab{0,}bczab{1,}bcz	ab{1,3}bcz	ab{3,4}bcz	ab{4,5}bcz	ab{0,1}bczab{0,1}cza[b-a]z*az(*)bza{1,}b{1,}cza**za.+?cz
(a+|b){0,}z
(a+|b){1,}z(a+|b){0,1}z	([abc])*dabbbcd)r  r   z([abc])*bcd)r  rU   z((((((((((a))))))))))10z((((((((((a))))))))))\10z((((((((((a))))))))))\41z(?i)((((((((((a))))))))))\41z(?i)abcr!  XBCAXCABXXABCYABABCz(?i)ab*cz	(?i)ab*bcABBCz
(?i)ab*?bcABBBBCz(?i)ab{0,}?bcz
(?i)ab+?bcz	(?i)ab+bcABQz(?i)ab{1,}bcz(?i)ab{1,}?bcz(?i)ab{1,3}?bcz(?i)ab{3,4}?bcz(?i)ab{4,5}?bcz
(?i)ab??bcz(?i)ab{0,1}?bcz	(?i)ab??cz(?i)ab{0,1}?cz	(?i)^abc$ABCCz(?i)^abcAABCz(?i)abc$z(?i)^z(?i)$z(?i)a.cz	(?i)a.*?cAXYZCz(?i)a.*cAXYZDz
(?i)a[bc]dABDz(?i)a[b-d]eACEz
(?i)a[b-d]AACACz	(?i)a[-b]zA-z	(?i)a[b-]z
(?i)a[b-a]z(?i)a[]bz(?i)a[z(?i)a]zA]z	(?i)a[]]bzA]Bz(?i)a[^bc]dAEDz(?i)a[^-b]cADCzA-Cz(?i)a[^]b]czA]Cz	(?i)ab|cdABCDz(?i)()efDEF)EFr   z(?i)*az(?i)(*)bz(?i)$br  z(?i)a\z(?i)a\(bA(B)r  z	(?i)a\(*bzA((Bz(?i)a\\bzA\Bz(?i)abc)z(?i)(abcz	(?i)((a)))r`   r`   r`   z(?i)(a)b(c))r!  r`   re  z	(?i)a+b+cAABBABCz(?i)a{1,}b{1,}cz(?i)a**z	(?i)a.+?cABCABCz(?i)a.{0,5}?cz(?i)(a+|b)*)r  r  z(?i)(a+|b){0,}z(?i)(a+|b)+z(?i)(a+|b){1,}z(?i)(a+|b)?)r`   r`   z(?i)(a+|b){0,1}z(?i)(a+|b){0,1}?r   Nz(?i))(z
(?i)[^ab]*CDEz(?i)a*z(?i)([abc])*dABBBCD)r  re  z(?i)([abc])*bcd)r  r`   z(?i)a|b|c|d|eEz(?i)(a|b|c|d|e)fr  )r  r  z(?i)abcd*efgABCDEFGz(?i)ab*	XABYABBBZXAYABBBZz(?i)(ab|cd)eABCDE)r  CDz(?i)[abhgefdc]ijHIJz(?i)^(ab|cd)ez(?i)(abc|)efr#  z(?i)(a|b)c*d)BCDr  z(?i)(ab|ab*)bc)r!  r`   z(?i)a([bc]*)c*)r!  BCz(?i)a([bc]*)(c*d))r  r  Dz(?i)a([bc]+)(c*d)z(?i)a([bc]*)(c+d))r  r  r  z(?i)a[bcd]*dcdcdeADCDCDEz(?i)a[bcd]+dcdcdez(?i)(ab|a)b*c)r!  r  z(?i)((a)(b)c)(d))r!  r`   r  r  z(?i)[a-zA-Z_][a-zA-Z0-9_]*ALPHAz(?i)^a(bc+|b[eh])g|.h$ABH)BHNz(?i)(bc+d$|ef*g.|h?i(j|k))EFFGZ)r  r  NIJ)r  r  JEFFGBCDDREFFGZz(?i)((((((((((a))))))))))z(?i)((((((((((a))))))))))\10AAz(?i)(((((((((a)))))))))z+(?i)(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))z/(?i)(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))re  z(?i)multiple words of textzUH-UHz(?i)multiple wordszMULTIPLE WORDS, YEAHzMULTIPLE WORDSz(?i)(.*)c(.*))r  r  DEz(?i)\((.*), (.*)\)z(A, B))r  r`   z(?i)[k]z
(?i)a[-]?cz(?i)(abc)\1z(?i)([a-c]*)\1za(?!b).abadr   za(?=d).z	a(?=c|d).za(?:b|c|d)(.)za(?:b|c|d)*(.)za(?:b|c|d)+?(.)za(?:b|(c|e){1,2}?|d)+?(.)z1,2)r   r  z(?<!-):(.*?)(?<!-):z
a:bc-:de:fzbc-:dez(?<!\\):(.*?)(?<!\\):z
a:bc\:de:fzbc\:dez(?<!\?)'(.*?)(?<!\?)'z
a'bc?'de'fzbc?'dezw(?# commentwz w(?# comment 1)xy(?# comment 2)zwxyzzw(?i)Wz(?i)wz"(?x)w# comment 1
x y
# comment 2
zzjkl
abc
xyzrZ  r[  zjkl
xyzabc
123r  z--ab_cd0123--	ab_cd0123z[\w]+z\D+1234abc5678z[\D]+z[\da-fA-F]+123abcz([\s]*)([\S]*)([\s]*)z testing!1972z3,2,1)r   ztesting!1972r   z(\s*)(\S*)(\s*)z(([a-z]+):)?([a-z]+)$smilz1,2,3)NNr  z((.)\1+)z.*dzabc
abdr   z[\41]!z(x?)?z	 (?x)foo r  z	(?x) foo z(?x)foo z(?<!abc)(d.f)	abcdefdofdofz[\w-]+
laser_beamz.*?\S *:zxx:za[ ]*?\ (\d+).*za   10za    10z(?ms).*?x\s*\Z(.*)zxx
x
z(?i)M+MMMz(?i)m+z(?i)[M]+z(?i)[m]+z"(?:\\"|[^"])*?"z"\""z^.*?$zone
two
three
za[^>]*?bza>bz^a*?$z^((a)c)?(ab)$)NNr   z^([ab]*?)(?=(b)?)c)r   Nz^([ab]*?)(?!(b))cz^([ab]*?)(?<!(a))cz\b.\b   Är  r   rL  c                 S   s   g | ]}t |qS r   )r  )r   fr   r   r   r   	  r  z+RegexTests.test_various.<locals>.<listcomp>r6   ...z%Incorrect number of test fields: ({})r  )ro   r	  )r)   r   r   r   MISSING_RPARENr  UNKNOWN_GROUPr   rd   TRAILING_CHARSrm  
BAD_ESCAPEBAD_CHAR_RANGENOTHING_TO_REPEATMULTIPLE_REPEAT
OPEN_GROUPrr  rs   r  r,   r  r   appendr@   subTestrr   r;   r   r&   )r
   r  rG  excvalro   r	  r  r   fields
group_listr   rM   r   r   r   r   test_various  sZ  






"#$%&*+,-024789;<=>@CHIJKLNOPQRTUVWXYZ[\]_`abcdefghjklmnopqrsuvwxyz{|}~                 	  
                                           "  #  $  %  &  '  (  )  *  +  -  .  /  0  1  2  3  4  5  6  8  9  :  ;  <  =  >  ?  @  A  C  D  E  F  G  H  I  J  K  L  N  O  Q  S  T  U  W  X  Y  [  ]  ^  _  `  a  b  c  d  e  f  h  i  j  k  l  m  n  o  p  q  s  t  
u  w  z  {  |  }  ~                     	    
                                                                                 !    "    #    $    %    '    (    )    *    +    ,    -    .    /    0    2    3    4    5    6    7    8    9    :    ;    =    >    ?    @    A    B    C    D    E    F    H    I    J    K    L    M    N    O    P    Q    S    T    U    V    W    X    Y    Z    [    \    ^    _    `    a    b    c    d    e    f    g    i    j    k    l    m    n    o    p    q    r    t    u    v    w    x    y    z    {    |    }                                                         	                                                                               !      #      $      %      &      '      (      )      +      ,      -      .      /      0      1      2      3      4      6      7      8      9      :      ;      <      =      >      ?      A      B      C      D      E      F      G      H      I      J      L      M      N      O      P      Q      R      S      T      U      W      X      Y      Z      [      \      ]      ^      _      `      b      c      d      e      f      g      h      i      j      k      m      n      o      p      q      r      s      t      u      v      x      y      z      {      |      }      ~                                                                     	        
                                                                                                                                                                         "        #        $        '        )        *        +        -        .        1        2        
4        6        
8        :        ;        <        ?        @        A        B        C        D        F        G        H        I        L        N        P        T        U        \        ]        ^        a        g        j        n        s        t        w        x        y        z        {        ~                                                                                                                                                               !          #          $          %          &          +          -          /          1          3          5          6          7          9          
:          
<          @,
zRegexTests.test_variousc                 C   s|   |  tdddd |  tdddd |  tdtddd |  tdddd |  tdd	d
 dd d S )Nztest\?zresult\?\.
ztest?r$  \1\1r!   rR   z\\1\\1c                 S   rJ   )Nr  r   rL   r   r   r   rN   	  rO   z-RegexTests.test_replacement.<locals>.<lambda>)r&   r)   rc   rA  r>   r   r   r   test_replacement	  s   zRegexTests.test_replacementc                 C   sN   t jt j t j }|d }d| d | d }| ttt|| j	 d S )Nr   r   r   rO  )
r	  ascii_lowercasedigitsascii_uppercaser&   rv   r   r)   r*   rw   )r
   allsideregexpr   r   r   test_common_prefix	  s    zRegexTests.test_common_prefixc                 C   s  |  tdddg d |  tdddddgddgf |  td	d
dddgg df |  tddddg dg df |  tddddddgg ddgf |  tddddg |  tdddddg |  tddddg d S ) Nz(\w)+r   r5   r  z(\w{3})+r   r   r  z^(\d{1,3})(?:\.(\d{1,3})){3}$z192.168.0.1r   192)168rW  ru  z^([0-9A-F]{2}){4} ([a-z]\d){5}$z3FB52A0C a2c4g3k9d3)3FB52A0C)a2c4g3k9d3z([a-z]W)([a-z]X)+([a-z]Y)aWbXcXdXeXfYr6   aW)bXcXdXeXfYz.*?(?=(.)+)br   r   z.*?(?>(.){0,2})dr  r   (.)+rU   )r&   r)   r;   capturesr=   r>   r   r   r   test_captures	  s<   


 zRegexTests.test_capturesc                 C   s   t dd}| |dddd t dd}| |dddd t d	d
}| |dddd t dd}| |ddd t dd}| | d t dd}| | d d S )Nz(X.*?Y\s*){3}(X\s*)+AB:zXY
X Y
X  Y
XY
XX AB:r   r5   r   ))r6      r[      rQ     z(X.*?Y\s*){3,}(X\s*)+AB:))r   r#  r$  r&  z\d{4}(\s*\w)?\W*((?!\d)\w){2}9999XX)r2  rb  )   r   zA\s*?.*?(\n+.*?\s*?){0,2}\(Xz
A
1
S
1 (X)r   rX   )r)  r.  z	Derde\s*:zaaaaaa:
Derde:)r.     zaaaaa:
Derde:)r\   rZ   )r)   r;   r&   r<   r  r   r   r   test_guards	  s    zRegexTests.test_guardsc              	   C   s   d}t  }t  }|dD ],}|d\}}|||f |||f |||f |||f |||f q|D ]:}|D ]5}td| d |}|rb||f|vra| dt|t| q@||f|v ru| dt|t| q@q<d S )Nu   I=i;I=ı;i=İ;=z(?i)\A\Zz{} matching {}z{} not matching {})	r  r   updateaddr)   r=   r,   r  r  )r
   pairsrs  matchingpairr6  r7  rM   r   r   r   test_turkic	  s4   zRegexTests.test_turkicc                 C   s  g d}|  tjdd|d d |  tjdd|d d |  tjdd|dd  g d}|  tjd	d
|d d
 |  tjdd|d d |  tjd	d|dd  |  tttjdg dd| j |  tjddt	g ddg  |  tjddt	g dddg dg}|  tjdd|d
 d ddg}|  tjdd|d
 d dg}|  tjdd|d
 d dg}|  tjdd|d
 d  |  tjdd!|d
 d  |  td"d#
 d$ |  td"d%
 d$ |  tjd&d'g d
 d( d S ))N)onetwothreez333\L<bar>444	333one444)r  z(?i)333\L<bar>444	333TWO444
333four444)s   ones   twos   threes   333\L<bar>444s	   333one444s   (?i)333\L<bar>444s	   333TWO444s
   333four444z3\L<bar>4\L<bar>+5z^\L<options>zsolid QWERT)good	brilliantz	+s\ol[i}dr0  z+solid QWERT)r<  r=  +solidr>  STRASSE(?fi)\L<words>u   straßewordsr2  stressr   r\   kitz(?i)\L<words>SKITSr0  u   SKİTSz(?fi)\b(\w+) +\1\bu    straße STRASSE )r5   r%  u    STRASSE straße z^\L<options>$r   r1   )r&   r)   r=   r   rv   r   r*   rw   r+   r  r<   r;   )r
   r1  r   r   r   test_named_lists	  s   






zRegexTests.test_named_listsc                 C   sL  |  tttd| j |  tttd| j |  tttd| j |  tttd| j |  tttd| j |  tttd| j d}|  td|d  |  td	|d
dd |  td|d  |  td|d
 d |  td|d
 d d}|  td|d
dd |  td|d
dd |  td|d
dd |  td|d
dd |  td|d
dd |  td|d
dd |  tttd| j |  tddd
dd |  tddd
dd  |  td!dd
dd" |  td#d$d
dd% |  td#d&d  |  td'd(d
dd) |  td*d+d
dd, |  td*d-d
dd |  td.d-d
dd/ |  td0d1d
dd |  td0d2d
dd3 |  td0d4d
dd3 |  td0d5d
dd3 |  td0d6d
dd |  td0d7d
dd |  td0d8d
dd |  td0d9d
dd: |  td0d;d
dd: |  td0d<d
dd: |  td0d=d  |  td0d>d  |  td0d?d  |  td0d@d  |  td0dAd  |  tdBdCd
ddD |  tdEdCd
ddF |  tdGdHd
ddI |  tdGdJd  |  tdGdKd
ddL dM}|  tdN|d
ddO |  tdP|d
ddQ |  tdR|d
ddS |  tjdTdUdV	 dWdXdYg |  tjdTdZdV	 dWd[dXg |  tjd\dZdV	 dWdYdXg |  tjd]dUdV	 dWd^dXg |  tjd_dUdV	 dWdYdXg |  tjd]dZdV	 dWdXdYg |  tjd`dadb	 dWdcddg |  tjd`dedb	 dWdfdcg |  tjdgdedb	 dWdddcg |  tjdhdadb	 dWdidcg |  tjdjdadb	 dWdddcg |  tjdhdedb	 dWdcddg |  tdkdl
 dm |  tdndl
 dm |  tdodp
 dq |  tdrdsdsdtg |  tdudvdvdtg |  tdwdx dy |  tdwdz d{ |  tdwd| d} |  tdwd~d  |  tdwd d |  tddjd |  tddjd |  tddjd |  tddjd |  tddjd |  tddjg ddgg f |  ttddd d S )Nz(fou){s,e<=1}z(fuu){s}z
(fuu){s,e}z(anaconda){1i+1d<1,s<=1}z(anaconda){1i+1d<1,s<=1,e<=10}z(anaconda){s<=1,e<=1,1i+1d<1}z-molasses anaconda foo bar baz smith anderson z(znacnda){s<=1,e<=3,1i+1d<1}z(znacnda){s<=1,e<=3,1i+1d<2}r   r5   )rW      rH  z(ananda){1i+1d<2}z(?:\bznacnda){e<=2}anacondaz(?:\bnacnda){e<=2}z#anaconda foo bar baz smith andersonz(fuu){i<=3,d<=3,e<=5})r1   r1   z(?b)(fuu){i<=3,d<=3,e<=5})rW   rX   rK  z(fuu){i<=2,d<=2,e<=5})r\   rX   rL  z(?e)(fuu){i<=2,d<=2,e<=5}z(fuu){i<=3,d<=3,e}z(?b)(fuu){i<=3,d<=3,e}z(approximate){s<=3,1i+1d<3}z(foobar){e}xirefoabralfobarxie)r2  r2  z(?e)(foobar){e})r9   r9   z(?b)(foobar){e})rY   rQ  rN  z(foobar){e<=2}xirefoabrzlfd)r   rW   rP  xirefoabzlfdz(foobar){i<=2,s<=2,e<=2}oobargoobaploowap)r)  rY   rS  z\b(foobar){e}\bzfoobarz)r   r.  rU  zboing zfoobarz goobar woopz(?b)\b(foobar){e}\b)r%  r#  rV  z^(foobar){e<=1}$foobarxfoobar)rD  rD  foobarxfooxbarfoxbarxoobarfoobaxoobar)r   r)  r_  fobarfoobaxfoobarxfoobarxxxxfoobarxfoxbarfoxbarxz (foobar){i<=1,d<=2,s<=3,2d+1s<4}(3oifaowefbaoraofuiebofasebfaobfaorfeoaro)r   rZ   rh  z$(?b)(foobar){i<=1,d<=2,s<=3,2d+1s<4})"   '   ri  zfoo(bar){e<=1}zap	foobarzap)r   rW   r6   r   fobarzapfoobrzap)rU  r6   r)  zxwww.cnn.com 64.236.16.20
www.slashdot.org 66.35.250.150
For useful information, use www.slashdot.org
this is demo data!
z(?s)^.*(dot.org){e}.*$)r   x   )rs  rs  z(?es)^.*(dot.org){e}.*$)rr  )]   d   z^.*(dot.org){e}.*$))r   w   )   e   z\b\L<words>{e<=1}\bz book cot dog desk zcat dogrA  cotdogz book dog cot desk z dogz(?e)\b\L<words>{e<=1}\bz(?r)\b\L<words>{e<=1}\bzdog z(?er)\b\L<words>{e<=1}\bs   \b\L<words>{e<=1}\bs    book cot dog desk s   cat dogs   cots   dogs    book dog cot desk s    dogs   (?e)\b\L<words>{e<=1}\bs   (?r)\b\L<words>{e<=1}\bs   dog s   (?er)\b\L<words>{e<=1}\bz(\w+) (\1{e<=1})zfoo fou)r  fouz(?r)(\2{e<=1}) (\w+)s   (\w+) (\1{e<=1})s   foo fou)s   foos   fouz(?:(?:QR)+){e}r  r   z	(?:Q+){e}r   z(?:service detection){0<e<5}zservic detection)r   rQ  zservice detect)r   r+  zservice detecti)r   r%  zservice detectionzin service detection)r      (?:cats|cat){e<=1}catr   r   r5   (?e)(?:cats|cat){e<=1}r   r   r   z(?:cat|cats){e<=1}catsr   r5   r   z(?e)(?:cat|cats){e<=1}z(?:cat){e<=1} (?:cat){e<=1}zcat cotr5   r   r   z/(?e)(GTTTTCATTCCTCATA){i<=4,d<=4,s<=4,i+d+s<=8}ATTATTTATTTTTCATA)r   r   rX   rY   r6   z(?:fo){e<=1}|(?:fo){e<=2}FOT)r&   rv   r   r)   r*   rw   r;   r<   r+   r   r  r=   	fullmatchfuzzy_countsfuzzy_changesr   rU  r   r   r   
test_fuzzy4
  s|  
















































zRegexTests.test_fuzzyc                 C   s:  |  tddd d  d |  tddd d  d |  tddd d  d |  tddd d  d	 |  tdd
d d  d |  tddd  |  tddd d  d |  tddd d  d |  tddd d  d |  tddd d  d |  tdd
d d  d |  tddd  |  tddd d  d |  tdddg d |  tddd d  d |  tdddg d |  tddd d  d |  tddd d  d |  td d!d d  d" |  td#d!d d  d" td$}|  t|d%d& |  t|d'd( |  t|d)d& |  t|d*d( |  t|d+d( |  t|d,d( |  t|d-d& |  t|d.d& |  t|d/d( |  t|d0d& |  t|d1d& |  t|d2d& d S )3Nz(\w)(?:(?R)|(\w?))\1rR   )rR   r!   r   r   )r   rU   r   abba)r  rU   Nkayak)r  ry  Npaper)papr   rU   dontmatchmez(?r)\2(?:(\w?)|(?R))(\w))rR   r   r!   )r   r   rU   )r  NrU   )r  Nry  )r  rU   r   z\(((?>[^()]+)|(?R))*\)
(ab(cd)ef))r  r  r5   )r   r   (cd)r  z(?r)\(((?R)|(?>[^()]+))*\))r  r   )r  r   r  r   z\(([^()]+|(?R))*\)zsome text (a(b(c)d)e) more text)(a(b(c)d)e)r  z(?r)\(((?R)|[^()]+)*\))r  rU   z!(foo(\(((?:(?>[^()]+)|(?2))*)\)))foo(bar(baz)+baz(bop)))r  r  z(bar(baz)+baz(bop))zbar(baz)+baz(bop)z%(?r)(foo(\(((?:(?2)|(?>[^()]+))*)\)))zv^\s*(<\s*([a-zA-Z:]+)(?:\s*[a-zA-Z:]*\s*=\s*(?:'[^']*'|"[^"]*"))*\s*(/\s*)?>(?:[^<>]*|(?1))*(?(3)|<\s*/\s*\2\s*>))\s*$z<foo><bar></bar></foo>Tz<foo><bar></foo></bar>Fz<foo><bar/></foo>z<foo><bar></foo>z<foo bar=baz/>z<foo bar="baz">z<foo bar="baz"/>z<    fooo   /  >z	foo<foo/>z<foo>foo</foo>z<foo><bar/>foo</foo>z<a><b><c></c></b></a>)r&   r)   r;   r!  r*   r   )r
   rgxr   r   r   test_recursive
  s   








zRegexTests.test_recursivec                 C   s  t d}| t||u  | t||u  |d}| t||u | t||u | |jd u t|}|  | |jd u | |jd u  t dd}t|}| 	t
| d | 	t
| d t dd}t|}| 	t
| d | 	t
| d t dd}t|}| 	t
|d | 	t
|d t dd}t|}| 	t
|d | 	t
|d d S )NrU   rI   r   r   r   r  )r)   r*   
assertTruecopydeepcopyr=   r	  detach_stringr  r&   r  r   r   )r
   rrM   m2r  it2r   r   r   	test_copy<  s6   






zRegexTests.test_copyc                 C   sv   |  tdddd |  tdddd |  tdddd |  tdddd	 |  tdddd d S )
Nr  z{0} => {2} {1}r  foo bar => bar fooz(?<word1>\w+) (?<word2>\w+)z{word2} {word1}bar foo)r  r5   )r  r5   )r&   r)   subfsubfnr=   expandfr>   r   r   r   test_formatg  s2   


zRegexTests.test_formatc              	   C   sH  |  ttddd |  ttddd |  ttjddddd |  ttjdddd	d |  ttjdd
dd	d |  ttjdd
dddd |  ttddd |  ttddd |  ttjddddd |  ttjdddd	d |  ttjdd
dd	d |  ttjdd
dddd d S )Nr   Tr  Fr6   )r  xabcr5   )r  r  r   r  z(?r)abcr&   r   r)   r  r>   r   r   r   test_fullmatchu  s4   zRegexTests.test_fullmatchc                 C   s  |  tdddd |  tdtdtdd |  tdddd |  tdtdtdd |  tdtdtdd |  tdtdtdd d	td	fD ]D}|  td
|g d tj	dkr|  td|g d |  td|g d qX|  td|g d |  td|g d qXdtdtdtdfD ]D}|  td|g d tj	dkr|  td|g d |  td|g d q|  td|g d |  td|g d qdtdfD ]&}|  t
d|g d |  t
d|g d |  t
d |g d! qd"td"td"td"fD ]'}|  t
d#|g d$ |  t
d%|g d$ |  t
d&|g d' q'dtdfD ]C}| td| d( | td)| d* | td)|d+d | td)|d,d | td)|d,d,d- qUdtdtdtdfD ]C}| td| d( | td.| d/ | td.|d+d | td.|d,d | td.|d,d,d0 qd S )1Nr"   rU   r   xaz   yr  s   xyzs   xazr   r   r   r   r   r   r   r   r   r   s   :a:b::c   :)rE  r  r  rE  r  s   :*)rE  rE  r  rE  r  rE  r  rE  s   (:*))rE  r  rE  rE  r  r  rE  rE  r     ::rE  rE  r  rE  rE  )rE  r  r  r  )rE  r  r  r  r  r  r  r   r   r   r   r   r   s
   a:b::c:::ds   :+)r  r  s   :::s   (:+)s   (:)(:*)))r  rE  )r  r  )r  r  r   r   r   r   r5   r   s   (a))r  )r  r  )r'   r)   rc   r   r   	bytearray
memoryviewr   r   r   r+   r&   r=   r  r   )r
   r	  r   r   r   test_issue_18468  s~   

  zRegexTests.test_issue_18468c                 C   s  |  tjddddjd |  tjdddd d |  tjddddjd |  tjdddd d |  tjdd	ddd  |  tjd
dddjd |  tjd
ddd d |  tjd
dddjd |  tjd
ddd d |  tjddddjd |  tjddddgdjd |  tjddddgd d |  tjddddgdjd |  tjddddgd d |  tjddddgdjd |  tjddddgd d |  tjddddgdjd |  tjddddgd d |  tjddddgdd  |  tjdddd d |  tjdddd d |  tjdddd d |  tjdddd d |  tjdddd d |  tjdd ddd  |  tjdd!ddd  d S )"Nr   rU   Tpartialr   r  r~  r9   catchzabc\w{3}r   Fr2  r  r_  z\d{4}$1234z	\L<words>post)r  rB  r4  r  r@  POST   poﬆPOSz	[a-z]*4R$r&  ab4a4a4R4aa44)r&   r)   r=   r  r<   r>   r   r   r   test_partial  s   zRegexTests.test_partialc              
   C   s:8  |  ttjdtjdd |  ttjdtjdd |  tddddg |  td	dddg |  tdd
dg |  tdddg |  tdddg |  dd tddD dg |  tddtjtjB 	dd |  tddtjtjB 	dd |  tddtjtjB 	dd |  tdd
 d |  ttjddtjdd |  tdd 	dd!d" |  td#d$	dd!d% |  td&d'	dd' |  td(d)d  |  td*d+	dd |  td,d-d!d. |  td,d/d!d0 |  td,d1d!d2 |  td3d1	 d1 |  td4d5 d6 |  td7d- d8 |  td7d/ d9 |  td:d	dd |  tjd;d1tjd	dd1 |  td<d=dd!d> |  td?d=dd!d@ |  tdAd=dd!dB |  tdCd=dd!dD |  tdEdF	dd- |  tjdGdHdIdJgdKg dL |  tdMdHg dN |  tdOdHg dL |  tdPdHg dL |  tdQd-	dd!dRdS |  tdTdUdd!dV |  tdWd-	dd!dX |  tdYdZd  |  td[d\d  | tj| jd]d^  |  td_d`dda |  tdbdc	ddc |  tddded  |  tdfdgd  |  tdhdi	dd!dRdj |  tdkdld$dmg |  tdndld$dmg |  tdodld$dmg |  tdpdld$dmg |  tdqdr	 dr |  dsd tdtduD dvdwg |  tdxdydzg d{ | tj| jd|d^  d}}d~}|  t||tjd d |  tdddg |  ttdddtjtd |  tddd  |  tddddd9g |  tddd^ dd tjdtjd}|  |dd  |  |dg  | tj| jdd^  |  tjdddd |  tjdddd |  tdd |  tjdddd |  tjdddd |  tdd |  tdd
 d |  tdd
 d |  tdd
 d tjdtjtjB d}|  dd |dD dg |  |ddg d}|  dd ||D dg |  ||dg tjdtjtjB tjB d}|  dd |dD dg |  |ddg d}|  dd ||D dg |  ||dg tjdkr?|  tddddU n|  tdddd |  tddddU tjdkrg|  tdddd n|  tdddd |  tdddd |  tjdddtjdd |  tddj d |  tddj d |  tddj d |  tddj d |  tddj d |  tddj d |  tddj d |  tddj d |  tddj d |  tdd¡j dá |  tdd¡j dá |  tdd¡j dá |  tddj d |  tddj d |  tddj d |  tddȡg  |  tdddd |  ttd-d-tj!d |  tddˡd dg |  tddˡd dg |  tddˡd dg |  tddˡd dg | tjddd^  |  tdd-	dd!dRdҡ |  tdd-	dd!dRdҡ dԠ"ddք t#d׃D }|  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| |  tdԠ"td|tdԠ"td| t$t#d}|  td"td|td"td| |  td"td|td"td| |  td"td|td"td| |  td"td|td"td| |  td"td|td"td| |  td"td |td"td| |  td"td|td"td| |  td"td|td"td| |  td"td|td"td| |  td"td|td"td	| |  td"td
|td"td| |  td"td|td"td| |  td"td|td"td| |  td"td|td"td| |  ttdd	 td |  tdd
 d |  tdddd |  tdddd |  t%dddd |  t%dddd |  tj&dddd d9 |  tj&ddddj'd |  tjdd dd d! |  tjd"d dd d! |  tjd#d dd d$ |  td%d& d8 |  td'd(d  |  td)d*g d+ |  td,d*g d+ |  d-d td.d/D g d0 |  d1d td2d/D g d0 |  td3d4d d4 |  td3d5d d5 |  td6d7d d7 |  td8d9d d9 |  td:d	dd!d; |  td<d=d>d?g |  td@d=ddAg |  tdBd	dd!dC |  tdDd=dEdg |  tdFd=dAdg |  tdGdHd dH |  tdId-	dJd  |  tdId-dJd-g |  tdKdLd dM |  tdNdLd dM |  tdOdLd  |  tdPdLd dL |  tdQdRd dR |  tdQdSd dT |  tdUdRd dV |  tdUdSd dT |  tdWdSd dS |  tdWdXd dT |  tdYdXd dT |  tdZdXd dT |  td[dLd  |  td\dLd dL |  td]dRd dR |  td]dSd dT |  td^dSd dS |  td^dXd dT |  td_dXd dT |  td`dXd dT |  tdadRd dR |  tdadSd dT |  tdbdRd dV |  tdbdSd dT |  tdcdSd dS |  tdcdXd dT |  tdddXd dT |  tdedXd dT |  tdfdRd dR |  tdfdSd dT |  tdgdSd dS |  tdgdXd dT |  tdhdXd dT |  tdidXd dT dj}|  t(tdk|d! |  tdldm d9 |  tdndod do tdp}dq}	|  drd ||	D dsdtg |  tdudvtj dw |  tdxdvtj dy |  tdzd{ d| |  td}d{d  |  td~d d |  td~dddg |  tdd	dd!d |  tdd	dd!d |  tdddd |  tdddd |  tjdddgd d |  tjdddgd d |  tdd d |  tdd d |  tdd d |  tdd d |  tdd d tjdddgd}
t)*|
}t)+|}
|  |
d d6 |  tjddtjd d| |  tjddtjd d |  tjddtjdd  |  tjddtjd d| |  tjddtjd d |  tjddtjdd  | ,tjdd^  | ,tjdd^  |  ttdd |  ttdd |  tddtj-ddg |  tjdddd d d}d}|  ttd| |d |  ttd| |d |  ttd| |d |  ttd| |d |  ttd| |d |  ttd| |d |  ttjddddgdd |  ttjddddgdd |  ttjddddgdd |  ttjddddgdd |  tjddddgd d |  tjddddgd d |  tdd d |  tdd d |  tddá d |  tddġd  |  tdŐdơ dǡ |  tdȐdɡ dʡ d}d}|  tt||d |  ttd͐dd |  ttdΐdd |  ttdϐdd |  ttdАdd |  ttdѐdҡd |  tdӐdԡ
 dա |  td֐dtj d |  td֐dtjj d |  tdؐdtj d |  tdؐdtjj d |  tdِdtj dۡ |  tdِdtjj dܡ |  tjdݐdtjtjB d dߡ |  tdd=dAg |  tdd=dAg |  tddddg |  tddg  |  tdddg |  tddg d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tdd	 d |  tjddddd |  tjddddd |  tjddddd |  tjddddd  |  tdd |  tdde d8 |  tdd d8 |  tdd d |  tddԡ d |  tddԡ d |  tdd$
 d |  tdd$. d	d i |  tdd$/ d	d-gi |  td
d$
 d |  td
d$. d	d i |  td
d$/ d	d-gi |  tdd$
 d |  tdd$. d	d i |  tdd$/ d	d-gi |  ttddd |  tjdddd d |  tjdddd d |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttd d!d |  ttd"d!d |  t&d#d$dg d$ |  t&d#d$	dd  |  t&d%d$dg d$ |  t&d%d$	dd& |  tjd'dddj'd |  tjd'd(ddj'd |  tjd)dddj'd |  tjd*dddj'd |  tjd*d(ddj'd |  tjd+dddj'd |  tjd+d(ddj'd |  tjd,dddj'd |  tjd-dddj'd |  tjd-d(ddj'd |  tjd.dddj'd |  tjd.d(ddj'd |  tjd/dddj'd |  tjd0dddj'd |  tjd0d(ddj'd |  tjd1dddj'd |  tjd1d(ddj'd |  tjd2dddj'd |  tjd3dddj'd |  tjd3d(ddj'd |  tjd4dddj'd |  tjd5dddj'd |  tjd6dddj'd |  tjd7dddj'd |  tjd8dddj'd |  tjd9dddj'd |  tjd7d-ddj'd |  tjd8d-ddj'd |  tjd9d-ddj'd |  tjd:dddj'd |  tjd;dddj'd |  tjd<dddj'd |  tjd=dddj'd |  tjd>dddj'd |  tjd?dddj'd |  tjd=d-ddj'd |  tjd>d-ddj'd |  tjd?d-ddj'd |  tjd@dAddj'd dB}dC}tj||tjd}|  |j d |  |j0g dDgg f |  tdEdFj dG |  tdEdHj d |  tdIdJdJg |  ttdKd-d |  ttdLd-d |  t&dMdL d6 |  tdNdO/ dPgg dPgdQ |  ttdRdSd |  ttdTdSd |  tdUdVj0g g g dWf |  tdXd&j dY |  tdXd&j0dgg d!gf |  tdZd&j d[ |  tdZd&j0g g dgf |  td\d&j d[ |  td\d&j0g g dgf |  td]d^j d_ |  td`d^j d |  tdad^j d |  tdbdcj dd |  tdedcj dd |  t&dfdgj d |  t&dhdgj d |  tdidjd  |  ttdkd |  ttdld |  tdmdng do |  tdpdng do |  tjdqdrtj1dj ds |  ttdtdd |  ttdudd |  tdvdw	 dw |  tdvdxd  |  tdydz	 dz |  tdyd{d  |  tdydzj0g d|gg f |  td}dz	 dz |  td~dzj0g d|gg f |  td2dg d |  td2dg d |  tddd  |  tddd  tjdtjtj3B d}|  |d	 d |  |d	 d |  |d	 d |  |d	 d d}d}tj||tjd}|  | d |  |. dddddd tj||tj-d}|  | d |  |. dddddd d}d}tj||tjd}|  |j dG |  |j0g g g f d}tj||tjd}|  |j dd |  |j0ddgg g f |  tdddd |  t%dddd |  tdd4ddf |  tdd5dd |  tddd  |  tjddtjdd  |  tdd d9 |  tdd d9 |  tddd  |  tdd d8 |  tdd$6 d$gg d$f |  tdd$7 d6gg df |  tt&ddd |  tt&ddd |  tdded  |  tdde d. |  tdd d |  tdd d8 |  tdd d9 |  tdd d9 |  tdd d8 |  tjddg d d |  tdd- d8 |  tjdtjdd- d8 |  tjdddd d |  tjddddd  |  tjdddd d |  tjdddd d |  tjddddd  |  tjdĐddd d |  tjdĐdddd  |  tjdĐddd d |  tjdŐddd d |  tjdŐdddd  |  ttjdƐdddd |  ttjdƐdddd |  ttjdƐdddd |  ttjdƐdddd |  ttjdƐdddd |  ttjdƐdddd |  ttjdƐdddd |  ttjdƐdddd d S (  Nz(?>b)r  Tz^((?>\w+)|(?>\s+))*$z\((?:(?>[^()]+)|(?R))*\)za(bcd(e)f)g(h)z	(bcd(e)f)z(h)z\((?:(?:[^()]+)|(?R))*\)za(b(cd)e)f)g)hz(b(cd)e)za(bc(d(e)f)ghz(d(e)f)z(?r)\((?:(?>[^()]+)|(?R))*\)c                 S   r9  r   r:  r   r   r   r   r   !  r  z+RegexTests.test_hg_bugs.<locals>.<listcomp>z\((?:[^()]*+|(?0))*\)za(b(c(de)fg)hz	(c(de)fg)za(bc)dr  r   z([\da-f:]+)$r  r  z^(?=ab(de))(abd)(e)abde)rp  r   r  z\ r   z^(a|)\1{2}br   r5   )r   r   z	^(a){0,0}r   r  z(?>.*/)bza/bz((?i)blah)\s+\1z	blah BLAHz(\()?[^()]+(?(1)\)|)z(abcdz(a*)*rU   r5   r5   r   r   r   r7   r6   r6   z	a(?#xxx)*z(?=abc){3}abc	abcabcabcr9   z^(?:a(?:(?:))+)+r   r&  za(?x: b c )dza#comment
*z(?V1)(a(?(1)\1)){1}
aaaaaaaaaar   z(?V1)(a(?(1)\1)){2})r9   r4   z(?V1)(a(?(1)\1)){3})r2  rn  z(?V1)(a(?(1)\1)){4})r*  )r   rX   z(?V1)(a)(?<=b(?1))bazz(?fi)\L<keywords>u)   POST, Post, post, poſt, poﬆ, and poﬅr  r  )keywords)r  Postr  u   poſtr     poﬅz(?fi)pos|post)r  Posr  u   poſr  r  z(?fi)post|posz(?fi)post|anotherz(?V1)((a)(?1)|(?2))r   r  z(?V1)(\1xx|){6}rR   )r&  r  z(a|)+r   z(a|)*\dPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaz^(?:a?b?)*$r   c                   S   rj  )Nz\N{1}rk  r   r   r   r   rN     rl  z)RegexTests.test_hg_bugs.<locals>.<lambda>r/  za
a
r  z(q1|.)*(q2|.)*(x(a|bc)*y){2,}xayxayz(?i)[^a]r`   z(?i)[[:ascii:]]u   Kz((a|b(?1)c){3,5})baaaaca)r  r  rU   z(?<=:\S+ )\w+z:9 abc :10 defr  z(?<=:\S* )\w+z(?<=:\S+? )\w+z(?<=:\S*? )\w+z(?:fe)?malefemalec                 S   r9  r   r:  r   r   r   r   r     r  z!(fe)?male: h(?(1)(er)|(is)) (\w+)z(female: her dog; male: his cat. asdsasdazfemale: her dogzmale: his catz (?<rec>\((?:[^()]++|(?&rec))*\))zaaa(((1+0)+1)+1)bbbrec)z(1+0)z	((1+0)+1)z(((1+0)+1)+1)c                   S   r   )Nr!   \r   r   r   r   r   rN     r   z%(CAGCCTCCCATTTCAGAATATACATCC){1<e<=2}ڮtcagacgagtgcgttgtaaaacgacggccagtCAGCCTCCCATTCAGAATATACATCCcgacggccagttaaaaacaatgccaaggaggtcatagctgtttcctgccagttaaaaacaatgccaaggaggtcatagctgtttcctgacgcactcgtctgagcgggctggcaaggtCAGCCTCCCATTCAGAATATACATCCzc..+/cz
cA/c
cAb/czcAb/cz(\w+)rv  u#   अन्‍न ന്‍ किनu)   [अन्‍न] [ന്‍] [किन]z.*a.*ba.*aaababbaz(?<x>a(?<x>b))r   r!   r  z(-)c                 S   s
   |  dS )Nr!   )r   rL   r   r   r   rN        
 r  axbxcz\bt(est){i<2}z	Some textc                   S   rj  )Nz.???rk  r   r   r   r   rN     rl  zfoo!?F)special_onlyzfoo\!\?zfoo!\?s   foo!?s   foo\!\?s   foo!\?z^([^z]*(?:WWWi|W))?$WWWi)r  z^([^z]*(?:WWWi|w))?$z^([^z]*?(?:WWWi|W))?$r0   c                 S   r9  r   r:  r   r!   r   r   r   r     r  yxxxc                 S   r9  r   r:  r  r   r   r   r     r  c                 S   r9  r   r:  r  r   r   r   r     r  c                 S   r9  r   r:  r  r   r   r   r     r  r   z(?V0).*r^   z(?V1).*z(?V0).*?r   z	|||||||||z	|t|e|s|t|z(?V1).*?z^(@)\n(?!.*?@)(.*)z\1\n==========\n\2z@
z@
==========
r}  cazr  r  z(?b)(?:cats|cat){e<=1}z(?:cat){e<=1}z(?e)(?:cat){e<=1}z(?b)(?:cat){e<=1}z(?:cats){e<=2}zc ats)r5   r5   r   z(?e)(?:cats){e<=2}r  z(?b)(?:cats){e<=2}zc a ts)r   r   r   z(?:cats){e<=1}z(?e)(?:cats){e<=1}z(?b)(?:cats){e<=1}z\bof ([a-z]+) of \1\bz#To make use of one of these modulesz\g<0>z(?V1)[[b-e]--cd]r   z(?V1)[b-e--cd]z(?V1)[[bcde]--cd]z(?V1)[bcde--cd]z ^unknown property at position 4$c                   S   rj  )Nz\p{}rk  r   r   r   r   rN   n  r  z(?:()|(?(1)()|z)){2}(?(2)a|z))rU   r   r   z(?:()|(?(1)()|z)){0,2}(?(2)a|z)r   c                 s   rg  r   rh  ri  r   r   r   rj  }  rk  z*RegexTests.test_hg_bugs.<locals>.<genexpr>i   z[[:alnum:]]+z[\p{Alpha}\p{PosixDigit}]+z[[:alpha:]]+z
\p{Alpha}+z[[:ascii:]]+z[\p{InBasicLatin}]+z[[:blank:]]+z[\p{gc=Space_Separator}\t]+z[[:cntrl:]]+z\p{gc=Control}+z[[:digit:]]+z[0-9]+z[[:graph:]]+z<[^\p{Space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}]+z[[:lower:]]+z
\p{Lower}+z[[:print:]]+z%(?V1)[\p{Graph}\p{Blank}--\p{Cntrl}]+z[[:punct:]]+z2(?V1)[\p{gc=Punctuation}\p{gc=Symbol}--\p{Alpha}]+z[[:space:]]+z\p{Whitespace}+z[[:upper:]]+z
\p{Upper}+z[[:word:]]+zL[\p{Alpha}\p{gc=Mark}\p{Digit}\p{gc=Connector_Punctuation}\p{Join_Control}]+z[[:xdigit:]]+z[0-9A-Fa-f]+r?  rE  s   (?a)[[:alnum:]]+s   (?a)[\p{Alpha}\p{PosixDigit}]+s   (?a)[[:alpha:]]+s   (?a)\p{Alpha}+s   (?a)[[:ascii:]]+s   (?a)[\x00-\x7F]+s   (?a)[[:blank:]]+s   (?a)[\p{gc=Space_Separator}\t]+s   (?a)[[:cntrl:]]+s   (?a)\p{gc=Control}+s   (?a)[[:digit:]]+s
   (?a)[0-9]+s   (?a)[[:graph:]]+s@   (?a)[^\p{Space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}]+s   (?a)[[:lower:]]+s   (?a)\p{Lower}+s   (?a)[[:print:]]+s&   (?aV1)[\p{Graph}\p{Blank}--\p{Cntrl}]+s   (?a)[[:punct:]]+s3   (?aV1)[\p{gc=Punctuation}\p{gc=Symbol}--\p{Alpha}]+s   (?a)[[:space:]]+s   (?a)\p{Whitespace}+s   (?a)[[:upper:]]+s   (?a)\p{Upper}+s   (?a)[[:word:]]+sP   (?a)[\p{Alpha}\p{gc=Mark}\p{Digit}\p{gc=Connector_Punctuation}\p{Join_Control}]+s   (?a)[[:xdigit:]]+s   (?a)[0-9A-Fa-f]+z\X$u   ab℃u   ℃z([^L]*)([^R]*R)LtR)r   r  r$  zx\1yxayxbyr%  zx{1}yz(a)*abcr  OXRGOOGOXrq  z.XRGz	.{1,3}XRG)r5   r)  zR|RRz(.)(?(1)(?!))r  z(y)?(\d)(?(1)\b\B)ax1y2z3b))r   ru  )r   2)r   rJ  z(y)?+(\d)(?(1)\b\B)c                 S   r9  r   r<   r   r   r   r   r     r  z(?i)(?:error){e}zregex failure)r_  )r)  rX   )rX   rZ   )rZ   rZ   c                 S   r9  r   r  r   r   r   r   r     r  z(?fi)(?:error){e}z(?p)\d+(\w(\d*)?|[eE]([+-]\d+))10b12z10E+12z(?p)(\w|ae|oe|ue|ss)aez(?p)one(self)?(selfsufficient)?oneselfsufficientz(ab\Kcd))r   r  z
\w\w\K\w\wabcdefghr   ghz(\w\w\K\w\w)efghz(?r)(ab\Kcd))r   r  z(?r)\w\w\K\w\wr  z(?r)(\w\w\K\w\w)z6(?(DEFINE)(?<quant>\d+)(?<item>\w+))(?&quant) (?&item)z5 elephantsz#(?&routine)(?(DEFINE)(?<routine>.))routinez12(*FAIL)|3123rJ  z(?r)12(*FAIL)|3z\d+(*PRUNE)\dz\d+(?=(*PRUNE))\dz\d+(*PRUNE)bcd|[3d]123bcd123zzdr   z\d+?(*PRUNE)bcd|[3d]3bcdz\d++(?<=3(*PRUNE))zzd|[4d]$124zzdz\d++(?<=(*PRUNE)3)zzd|[4d]$z\d++(?<=2(*PRUNE)3)zzd|[3d]$z(?r)\d(*PRUNE)\d+z(?r)\d(?<=(*PRUNE))\d+z(?r)\d+(*PRUNE)bcd|[3d]z(?r)\d++(?<=3(*PRUNE))zzd|[4d]$z(?r)\d++(?<=(*PRUNE)3)zzd|[4d]$z (?r)\d++(?<=2(*PRUNE)3)zzd|[3d]$z\d+(*SKIP)bcd|[3d]z\d+?(*SKIP)bcd|[3d]z\d++(?<=3(*SKIP))zzd|[4d]$z\d++(?<=(*SKIP)3)zzd|[4d]$z\d++(?<=2(*SKIP)3)zzd|[3d]$z(?r)\d+(*SKIP)bcd|[3d]z(?r)\d++(?<=3(*SKIP))zzd|[4d]$z(?r)\d++(?<=(*SKIP)3)zzd|[4d]$z(?r)\d++(?<=2(*SKIP)3)zzd|[3d]$zJune 30, December 31, 2013 2012
some words follow:
more words and numbers 1,234,567 9,876,542
more words and numbers 1,234,567 9,876,542z(?<!\d)(?>2014|2013 ?2012)z1(?>2)12zn(?V1w)(?=(?=[^A-Z]*+[A-Z])(?=[^a-z]*+[a-z]))(?=\D*+\d)(?=\p{Alphanumeric}*+\P{Alphanumeric})\A(?s:.){8,255}+\ZzAAaa11!!z(?smx)
(?(DEFINE)
  (?<subcat>
   ^,[^,]+,
   )
)

# Group 2 is defined on this line
^,([^,]+),

(?:(?!(?&subcat)[\r\n]+(?&subcat)).)+
zP
,Cat 1,
,Brand 1,
some
thing
,Brand 2,
other
things
,Cat 2,
,Brand,
Some
thing
c                 S   s   g | ]}| d dqS r  r  r   r   r   r   r     s    )rb  )r   r\   )rb  )6   ;   z(abcdefgh){e}z******abcdefghijklmnopqrtuvwxyz)r   r+  z(abcdefghi){e})r   r%  z(?:(?=\d)\d+\b|\w+)r  r2  z(?(?=\d)\d+\b|\w+)z (?(?<=love\s)you|(?<=hate\s)her)z
I love yourL  z&I love you but I don't hate her eitheryouherz(?p)a*(.*?)aaabbb)r  bbbz
(?p)a*(.*)r   r  z(?irV0)\L<kw>21ru  )kwz(?irV1)\L<kw>za|b111a222)r6   r   z(?r)a|bz(?if)<(CLI)><\1>z
<cli><cli>r*  z
<cli><clI>z(?ifr)<\1><(CLI)>z\L<options>r  r  r0  z(x{6}){e<=1}xxxxxxxxxxxr_  z(?r)(x{6}){e<=1}c                   S   rj  )Ns   00000\0\00\^(\00\U05000000rk  r   r   r   r   rN     rl  c                   S   rj  )Ns   {e<lrk  r   r   r   r   rN     r  z	((?0)){e}z	 ?(?0){e}z0((brown)|(lazy)){1<=e<=3} ((dog)|(fox)){1<=e<=3}z+The quick borwn fax jumped over the lzy hog)borwnr  r   faxr   r  )lzyr   r  hogr  r   z\d\d\d-\d\d-\d\d\d\dz$My SSN is 999-89-76, but don't tell.)$   r  u   Йu   йz(?ui)z(?ai)z(?afi)z
(?i)\L<aa>22121)r   z(?ri)\L<aa>z(?fi)\L<aa>z(?fri)\L<aa>z(?r)\1dog..(?<=(\L<aa>))$ccdogccbcbccrD  z(?ir)\1dog..(?<=(\L<aa>))$z(2)(?:\1{5}){e<=1}3222212)r5   r\   z(\d)(?:\1{5}){e<=1}z&\A(?P<whole>(?>\((?&whole)\)|[+\-]))\Zz((-))z((-)+)zx.*? (.).*\1(.*)\1z	x  |y| z|rm  z\.sr (.*?) (.)(.*)\2(.*)\2(.*)z#.sr  h |<nw>|<span class="locked">|)r   #   z"\xF9\x80\xAEqdz\x95L\xA7\x89[\xFE \x91)\xF9]\xDB'\x99\x09=\x00\xFD\x98\x22\xDD\xF1\xB6\xC3 Z\xB6gv\xA5x\x93P\xE1r\x14\x8Cv\x0C\xC0w\x15r\xFFc%" z(?P<http_referer>((?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``)))) (?P<useragent>((?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``))))zfoo(?<=foo)zfoo(?<!foo)zfoo(?<=foo|x)zfoo(?<!foo|x)z0(?(?=.*\!.*)(?P<true>.*\!\w*\:.*)|(?P<false>.*))r  z\w*(ea)\w*|\w*e(?!a)\w*easier)eaz(^1234$){i,d}12234z(^1234$){s,i,d}z(^123$){s,i,d}xxxxxxxx123)r   rY   )r   r.  r   za?yzxxxxyz)r   r   z(?:(?![a-d]).)+z.(?(DEFINE)(?P<mydef>(?:(?![a-d]).)))(?&mydef)+z((\w{1,3})(\.{2,10})){1,3}z("Erm....yes. T..T...Thank you for that."zErm....Ermz....zT...Tr  z((\w{1,3})(\.{2,10})){3}z((\w{1,3})(\.{2,10})){2}z((\w{1,3})(\.{2,10})){1})r  )zT..r  r<  r
  z(?:ESTONIA(?!\w)){e<=1}zESTONIAN WORKERSESTONIANz(?:ESTONIA(?=\W)){e<=1}z(?:(?<!\w)ESTONIA){e<=1}zBLUB NESTONIANESTONIAz(?:(?<=\W)ESTONIA){e<=1}z(?r)(?:ESTONIA(?!\w)){e<=1}z(?r)(?:ESTONIA(?=\W)){e<=1}z(?r)(?:(?<!\w)ESTONIA){e<=1}z(?r)(?:(?<=\W)ESTONIA){e<=1}z(?:A.*B.*CDE){e<=2}zA B CYZz(?:A.*B.*?CDE){e<=2}z(?:A.*?B.*CDE){e<=2}z(?:A.*?B.*?CDE){e<=2}z ,0A[)r  literal_spacesz\ \,0A\[z \,0A\[z\ ,0A\[z ,0A\[z(?(?=A)A|B)r  z
(?(?=A)A|)r1   z
(?(?=X)X|)z(?(?=X))z(?(DEFINE)(?<func>.))(?&func)r   funcz!(?(DEFINE)(?<func>.))(?=(?&func))z#(?(DEFINE)(?<func>.)).(?<=(?&func))zab(?#comment\))cdz[a-z]+ [a-z]*?:r  z(?r):[a-z]*? [a-z]+z(?u)\p{Script:Beng}u   ৯z(?u)\p{Script:Bengali}z!(?u)\p{Script_Extensions:Bengali}z(?u)\p{Script_Extensions:Beng}z(?u)\p{Script_Extensions:Cakm}z(?u)\p{Script_Extensions:Sylo}z(?u)\p{scx:Latin}r  z(?u)\p{scx:Ahom}z(?u)\p{scx:Common}4z(?u)\p{scx:Caucasian_Albanian}z(?u)\p{scx:Arabic}u   تz(?u)\p{scx:Balinese}z(?u)\p{scx:Devanagari}u   जz(?u)\p{scx:Batak}z(?P<x>.)*(?&x)r  z(?P<x>.)(?P<x>.)(?P<x>.)r   z(?:ab)*ababz(?:ab)*?z(?:ab)*+z(?:ab)+z(?:ab)+?z(?:ab)++z(?r)(?:ab)*z(?r)(?:ab)*?z(?r)(?:ab)*+z(?r)(?:ab)+z(?r)(?:ab)+?z(?r)(?:ab)++r/   za*?za*+r:   za+?za++z(?r)a*z(?r)a*?z(?r)a*+z(?r)a+z(?r)a+?z(?r)a++z(?:\s*\w+'*)+whateveraz  (?P<termini5>GGCGTCACACTTTGCTATGCCATAGCAT[AG]TTTATCCATAAGATTAGCGGATCCTACCTGACGCTTTTTATCGCAACTCTCTACTGTTTCTCCATAACAGAACATATTGACTATCCGGTATTACCCGGCATGACAGGAGTAAAA){e<=1}(?P<gene>[ACGT]{1059}){e<=2}(?P<spacer>TAATCGTCTTGTTTGATACACAAGGGTCGCATCTGCGGCCCTTTTGCTTTTTTAAGTTGTAAGGATATGCCATTCTAGA){e<=0}(?P<barcode>[ACGT]{18}){e<=0}(?P<termini3>AGATCGG[CT]AGAGCGTCGTGTAGGGAAAGAGTGTGG){e<=1}?  GCACGGCGTCACACTTTGCTATGCCATAGCATATTTATCCATAAGATTAGCGGATCCTACCTGACGCTTTTTATCGCAACTCTCTACTGTTTCTCCATAACAGAACATATTGACTATCCGGTATTACCCGGCATGACAGGAGTAAAAATGGCTATCGACGAAAACAAACAGAAAGCGTTGGCGGCAGCACTGGGCCAGATTGAGAAACAATTTGGTAAAGGCTCCATCATGCGCCTGGGTGAAGACCGTTCCATGGATGTGGAAACCATCTCTACCGGTTCGCTTTCACTGGATATCGCGCTTGGGGCAGGTGGTCTGCCGATGGGCCGTATCGTCGAAATCTACGGACCGGAATCTTCCGGTAAAACCACGCTGACGCTGCAGGTGATCGCCGCAGCGCAGCGTGAAGGTAAAACCTGTGCGTTTATCGATGCTGAACACGCGCTGGACCCAATCTACGCACGTAAACTGGGCGTCGATATCGACAACCTGCTGTGCTCCCAGCCGGACACCGGCGAGCAGGCACTGGAAATCTGTGACGCCCTGGCGCGTTCTGGCGCAGTAGACGTTATCGTCGTTGACTCCGTGGCGGCACTGACGCCGAAAGCGGAAATCGAAGGCGAAATCGGCGACTCTCATATGGGCCTTGCGGCACGTATGATGAGCCAGGCGATGCGTAAGCTGGCGGGTAACCTGAAGCAGTCCAACACGCTGCTGATCTTCATCAACCCCATCCGTATGAAAATTGGTGTGATGTTCGGCAACCCGGAAACCACTTACCGGTGGTAACGCGCTGAAATTCTACGCCTCTGTTCGTCTCGACATCCGTTAAATCGGCGCGGTGAAAGAGGGCGAAAACGTGGTGGGTAGCGAAACCCGCGTGAAAGTGGTGAAGAACAAAATCGCTGCGCCGTTTAAACAGGCTGAATTCCAGATCCTCTACGGCGAAGGTATCAACTTCTACCCCGAACTGGTTGACCTGGGCGTAAAAGAGAAGCTGATCGAGAAAGCAGGCGCGTGGTACAGCTACAAAGGTGAGAAGATCGGTCAGGGTAAAGCGAATGCGACTGCCTGGCTGAAATTTAACCCGGAAACCGCGAAAGAGATCGAGTGAAAAGTACGTGAGTTGCTGCTGAGCAACCCGAACTCAACGCCGGATTTCTCTGTAGATGATAGCGAAGGCGTAGCAGAAACTAACGAAGATTTTTAATCGTCTTGTTTGATACACAAGGGTCGCATCTGCGGCCCTTTTGCTTTTTTAAGTTGTAAGGATATGCCATTCTAGACAGTTAACACACCAACAAAGATCGGTAGAGCGTCGTGTAGGGAAAGAGTGTGGTACCi  z)(?e)(dogf(((oo){e<1})|((00){e<1}))d){e<2}dogfoodr  dogfootr  u   👨‍👩‍👧‍👦z(?=a)az(?!b)az
((\d)*?)*?zX(?(DEFINE)(?<mydef>(?<wrong>THIS_SHOULD_NOT_MATCHx?)|(?<right>right))).*(?<=(?&mydef).*)zx rightrM  )mydefwrongrM  z(?:cat){e<=1:[u]}cutz(?:cat){e<=1:u}z?(?be)(AGTGTTCCCCGCGCCAGCGGGGATAAACCG){s<=5,i<=5,d<=5,s+i+d<=10}TTCCCCGCGCCAGCGGGGATAAACCG)r   r5   r6   r)  z	(?:bc){e})r5   r   r5   z(?e)(?:bc){e}r  z(?b)(?:bc){e}z,(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){e}z$ 10,112.111.12)r   r   r)  z/(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=1}z9(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=1,i<=1,d<=1}z/(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=3}z$ 10,1a2.111.12)r   r   r   z/(?e)(?:^(\$ )?\d{1,3}(,\d{3})*(\.\d{2})$){s<=2}z(?e)(?:0?,0(?:,0)?){s<=1,d<=1}z,0;0z(?e)(?:0??,0(?:,0)?){s<=1,d<=1}z#\b(?e)(?:\d{6,20}){i<=5:[\-\\\/]}\bz-cat dog starting at 00:01132.000. hello worldz(?#)z(?x)(?#)z(\d+){i<=2:[ab]}123X4Y5)r  r  5z(?i)(\d+){i<=2:[ab]}z^(test){e<=5}$terstin)r   r6   r   z(?:(x*)\1\1\1)*x$z(?:(x*)\1{3})*x$zt(?:es){s<=1:\d}tte5tteztzt(?:es){i<=1:\d}ttes5ttesztr6   zt(es){i<=1,0<e<=1}tzt(?:es){i<=1,0<e<=1:\d}tz(\d+ week|\d+ days)7 days)r   r!  r   10 days)r   r"  r   z[ ]* Name[ ]*\* z  Name *za|\.*pb\.pyz.geojsa?  (?<=(?:\A|\W|_))(\d+ decades? ago|\d+ minutes ago|\d+ seconds ago|in \d+ decades?|\d+ months ago|in \d+ minutes|\d+ minute ago|in \d+ seconds|\d+ second ago|\d+ years ago|in \d+ months|\d+ month ago|\d+ weeks ago|\d+ hours ago|in \d+ minute|in \d+ second|in \d+ years|\d+ year ago|in \d+ month|in \d+ weeks|\d+ week ago|\d+ days ago|in \d+ hours|\d+ hour ago|in \d+ year|in \d+ week|in \d+ days|\d+ day ago|in \d+ hour|\d+ min ago|\d+ sec ago|\d+ yr ago|\d+ mo ago|\d+ wk ago|in \d+ day|\d+ hr ago|in \d+ min|in \d+ sec|in \d+ yr|in \d+ mo|in \d+ wk|in \d+ hr)(?=(?:\Z|\W|_))z1 month agoz9 hours 1 minute agoz1 minute agoz10 months 1 hour agoz
1 hour agoz1 month 10 hours agoz10 hours ago2TTCAGACGTGTGCTCTTCCGATCTCAATACCGACTCCTCACTGTGTGTCTzw(?P<insert>.*)(?P<anchor>CTTCC){e<=1}(?P<umi>([ACGT]){4,6})(?P<sid>CAATACCGACTCCTCACTGTGT){e<=2}(?P<end>([ACGT]){0,6}$))r   2   TTCAGACGTGTGCTCTTCCGATCTCAATACCGACTCCTCACTGTGTGTCT)insertanchorumisidrd  zt(?P<insert>.*)(?P<anchor>AACACTGG){e<=1}(?P<umi>([AT][CG]){5}){e<=2}(?P<sid>GTAACCGAAG){e<=2}(?P<end>([ACGT]){0,6}$)&GGAAAACACTGGTCTCAGTCTCGTAACCGAAGTGGTCG&GGAAAACACTGGTCTCAGTCTCGTCCCCGAAGTGGTCGrw     z(test1)|(test2)zmatched: \1\2test1zmatched: test1zmatched: {1}{2}z(?:\bha\b){i:[ ]}havingz	(?a:\w)\wu   dжz(?a:\w)(?u:\w)z	^\p{LC}+$u   😺z	^\p{So}+$r   )r   r  r   z\p{HorizSpace}+u4   	   ᠎             　z\p{VertSpace}+u   
  z(?(?<=A)|(?(?![^B])C|D))z^a?(a?)b?c\1$abcar4  z(?(?=a).|..)z(?(?=b).|..)z(?(?!a).|..)z(?(?!b).|..)z(\L<foo>){e<=5}blah)r  r  z
[^/]*b/ccczb/ccczb/ccbzb/ccz
[^/]*b/xyzzb/xyzb/yzz(?i)[^/]*b/cccz(?i)[^/]*b/xyzz<thinking>.*?</thinking>r6  z	<thinkingz
<thinking>z<thinking>xz<thinking>xyz abcz<thinking>xyz abc fooz<thinking>xyz abc foo z<thinking>xyz abc foo bar)8r&   r   r)   r*   V1r+   r  r;   rm   r   r  r=   r]   r<   rr   r   UNDEF_CHAR_NAMEr!  r  	BESTMATCHr  rc   WORDspansr  rA  FULLCASEr  rH  r   r   r  r  DEBUGr  rB  rF  r  r  r  rr  pickledumpsloadsr  ENHANCEMATCHr   r_  r  r  r   V0r   r  allcapturesallspans)r
   fzseqrxr   rawr  rV  
TEST_REGEX	TEST_DATAr  r   upper_ilower_irU   py_regex_patternro   rM   sequencer   r   r   test_hg_bugs  s   











































  

  








	

""(($"&&$$$$$$$$"""""""&zRegexTests.test_hg_bugsc                 C   s  |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttd	dd |  ttd
dd |  ttd	dd |  ttd
dd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttddd |  ttdd d |  ttd!d"d |  ttd!d#d |  ttdd$d |  ttdd%d |  ttd&d'd |  ttd&d(d d S ))Nz(?r)(?:a){e<=1:[a-z]}r  Tz(?:a){e<=1:[a-z]}r   Fr  r  z(?:ab){e<=1:[a-z]}z(?r)(?:ab){e<=1:[a-z]}z(a)\1{e<=1:[a-z]}z(?r)\1{e<=1:[a-z]}(a)r  r  z4(?fiu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}tsstz5(?firu)(?:\N{LATIN SMALL LETTER SHARP S}){e<=1:[a-z]}z-szs-z4(?fiu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}ssstsstsz5(?firu)\1{e<=1:[a-z]}(\N{LATIN SMALL LETTER SHARP S})stsstssszss-szsss-z5(?firu)(\N{LATIN SMALL LETTER SHARP S})\1{e<=1:[a-z]}z(?fiu)(ss)\1{e<=1:[a-z]}u   ßtsu   ßstz(?firu)\1{e<=1:[a-z]}(ss)u   stßu   tsßu   ß-su   ßs-z(?firu)(ss)\1{e<=1:[a-z]}u   s-ßu   -sßr  r>   r   r   r   test_fuzzy_ext  sh  zRegexTests.test_fuzzy_extc                 C   s   |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd |  tdddd d S )Nz	(?P<x>.)+r   z{0} {0[0]} {0[-1]}zabc abc abcz0{1} {1[0]} {1[1]} {1[2]} {1[-1]} {1[-2]} {1[-3]}zc a b c c b az0{x} {x[0]} {x[1]} {x[2]} {x[-1]} {x[-2]} {x[-3]})r&   r)   r=   r  r  r>   r   r   r   test_subscripted_captures_  s@   




z$RegexTests.test_subscripted_capturesc                 C   s   t jdkrL| tddg d | tdddd | tddg d | dd	 tddD g d
 | dd	 tddD g d d S d S )Nr   z\b|:+za::bc)r   rU   r   r   r   r   r   z-a---bc-)r   r   r   r   r   c                 S   r9  r   r  r   r   r   r   r   y  r  z2RegexTests.test_more_zerowidth.<locals>.<listcomp>)r1   r  r4   r  r)  r)  c                 S   r9  r   r  r   r   r   r   r   {  r  z
(?m)^\s*?$z	foo


bar)r  )r   r)  rV  )r   r   r&   r)   r   rc   r+   r  r>   r   r   r   test_more_zerowidthr  s   
zRegexTests.test_more_zerowidthc                 C   s4   |  tddg d |  tddg d d S )Nz\Ru   

  )ri   rP   r     u    u    s   \Rs   

)s   
rb            r   r>   r   r   r   test_line_ending~  s   zRegexTests.test_line_endingr   )r   r   r   rw   rt   r   r   r   r   r   r   r  r  r_  rm  r  r  r  r  r  r  r  r  r  r  r  r  DUPLICATE_GROUPCANT_TURN_OFFr6  r'   r.   r?   rD   re   rh   rj   ru   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   r$  r8  r9  r<  r>  rD  rG  rM  rO  r^  r`  re  ri  rn  rq  ru  rv  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r'  r*  r+  r,  r.  r2  r3  r;  r>  r?  r@  rW  r\  r`  rt  r  r  r  r"  r,  r5  rG  r  r  r  r  r  r  r  rM  rT  rU  rW  r^  r   r   r   r   r      s(   
9	3%!X			" 9b:	0*6M     d	6 BG+L5          Xr   c                   C   s   t jdd d S )Nr   )	verbosity)unittestmainr   r   r   r   	test_main  r   rd  __main__)weakrefr   r  r<  r)   r	  r   rb  rA   r   rF  r   TestCaser   rd  r   r   r   r   r   <module>   sb                                       
