HEX
Server: Apache
System: Linux zacp120.webway.host 4.18.0-553.50.1.lve.el8.x86_64 #1 SMP Thu Apr 17 19:10:24 UTC 2025 x86_64
User: govancoz (1003)
PHP: 8.3.26
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: //usr/local/lib/python3.7/test/__pycache__/test_re.cpython-37.opt-2.pyc
B

��g7��@s�ddlmZmZmZmZmZddlZddlZddlZddl	Z	ddl
Z
ddlZddlmZddl
mZGdd�de�ZGdd�de�ZGd	d
�d
e
j�ZGdd�de
j�ZGd
d�de
j�ZGdd�de
j�Zedkr�e
��dS)�)�
gc_collect�
bigmemtest�_2G�cpython_only�captured_stdoutN)�Scanner)�proxycseZdZ�fdd�Z�ZS)�Scstt��|��S)N)r	�super�__getitem__)�self�index)�	__class__��(/usr/local/lib/python3.7/test/test_re.pyrsz
S.__getitem__)�__name__�
__module__�__qualname__r�
__classcell__rr)rrr	sr	cseZdZ�fdd�Z�ZS)�Bcstt��|��S)N)rr
r)rr
)rrrrsz
B.__getitem__)rrrrrrr)rrrsrc@seZdZd�dd�Zd�dd�Zd�dd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�Zdd�Zd d!�Zd"d#�Zd$d%�Zd&d'�Zd(d)�Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd:d;�Zd<d=�Z d>d?�Z!d@dA�Z"dBdC�Z#dDdE�Z$dFdG�Z%dHdI�Z&dJdK�Z'dLdM�Z(dNdO�Z)dPdQ�Z*dRdS�Z+dTdU�Z,dVdW�Z-dXdY�Z.dZd[�Z/e0d\d]��Z1d^d_�Z2d`da�Z3dbdc�Z4dde5j6fddde�Z7e8j9e8j:dfZ;dgdh�Z<didj�Z=dkdl�Z>dmdn�Z?dodp�Z@dqdr�ZAdsdt�ZBdudv�ZCdwdx�ZDdydz�ZEd{d|�ZFd}d~�ZGdd��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTd�d��ZUd�d��ZVd�d��ZWd�d��ZXd�d��ZYd�d��ZZd�d��Z[d�d��Z\d�d��Z]d�d��Z^d�d��Z_d�d��Z`d�d��Zad�d��Zbd�d��Zcd�d��Zdd�d��Zed�d��Zfegehd�d��d�d���Ziegehd�d��d�dÄ�Zjd�dńZkd�dDŽZle0d�dɄ�Zmd�d˄Znd�d̈́Zod�dτZpd�dфZqd�dӄZrd�dՄZse0d�dׄ�Ztd�dلZud�dۄZvd�d݄Zwd�d߄Zxd�d�Zyd�d�Zzd�d�Z{d�d�Z|d�d�Z}d�d�Z~d�d�Zd�d�Z�d�d�Z�dS)��ReTestsNcs,��||�����fdd���||�dS)NcsLt|ttf�r2x8t||�D]\}}�||�qWn��t|�t|���dS)N)�
isinstance�tuple�list�zip�assertIs�type)�actual�expect�x�y)�msg�recurserrrr"sz)ReTests.assertTypedEqual.<locals>.recurse)�assertEqual)rrrr!r)r!r"rr�assertTypedEqualszReTests.assertTypedEqualc	Csh|�tj��}t�|�WdQRX|j|d��0|j}|�|j|�|dk	rZ|�|j|�WdQRXdS)N)�pattern)	�assertRaises�re�error�compile�subTest�	exceptionr#r!�pos)rr%�errmsgr,�cm�errrrr�checkPatternError&szReTests.checkPatternErrorc	Csn|�tj��}t�|||�WdQRX|j||d��0|j}|�|j|�|dk	r`|�|j|�WdQRXdS)N)r%�repl)	r&r'r(�subr*r+r#r!r,)rr%r1�stringr-r,r.r/rrr�checkTemplateError/szReTests.checkTemplateErrorc	CsRtd�}t�d|�}|�t��|�d�WdQRXt|�~t�|�d�dS)N�x�as�xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx)�	bytearrayr'�finditerr&�BufferError�extendrr)r�b�itrrr�test_keep_buffer8szReTests.test_keep_buffercCs2d}t�d�}t|�}|�|�d�|�d��dS)NZQabbbcRzab+c)r'r)rr#�findall)r�srr rrr�test_weakrefCs
zReTests.test_weakrefcCs�|�t�dd��d�d�|�t�dd���d�|�t�dd��d�d�|�t�dd���d�|�t�dd��|�t�d	d
��d�d�|�t�d	d
���d�|�t�dd��d�d�|�t�dd���d�|�t�d
d
��dS)Nzx*Zaxxr)rrzx+)��rZaaaza*�xxxZxxxa)rrBza+)r#r'�search�span�assertIsNone�match)rrrr�test_search_star_plusIszReTests.test_search_star_pluscCst|�d��}t|d�S)NrrA)�int�group�str)rZmatchobjZ	int_valuerrr�bump_numUszReTests.bump_numcs�|�t�ddd�d�|�t�dtd�td��d�|�t�ddd�d�|�t�dtd�td��d�|�t�dtd�td��d�|�t�dtd�td��d�x&d	D]}|�t�|dd
|�d�q�W|�t�ddd
�d�|�t�d|jd�d�|�t�d|jdd�d�|�tjd|jddd�d�|�t�ddd�d�d�|�t�ddd�d�d�|�t�d�d�d�|�t�d��	dd�d���|�t�d�fdd�d���|�t�d d!d�d"�|�t�d d#d�d"�|�t�d$d%d�d"�|�t�d$d&d�d"�|�t�dd'd�d(�|�t�dd(d�d(�|�t�dd(d�t
d)�t
d*�t
d+�t
d,�t
d-�t
d.�t
d/��xZd0D]R}|�|��<|�tj
��$|�t�dd|d�d|�WdQRXWdQRX�q�W|�t�d1d2d3�d4�dS)5Nr �a�xyzZxaz�yr6sxyzsxaz)�àuаu𝒜zx%szz(?i)b+rz	bbbb BBBBzx xz\d+z08.2 -2 23x99yz9.3 -3 24x100yrBz
9.3 -3 23x99y)�count�.cSsdS)Nz\nr)�mrrr�<lambda>k�z+ReTests.test_basic_re_sub.<locals>.<lambda>z\n�
z\1\1z(.)�xx�\z\\cs�S)Nr)rS)r?rrrTqrUz(?P<a>x)z
\g<a>\g<a>Zxxxxz
\g<a>\g<1>z
(?P<unk>x)z\g<unk>\g<unk>z
\g<1>\g<1>z\t\n\v\r\f\a\bz	

�	�
��
���Z,cdehijklmopqsuwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz^\s*�X�testZXtest)r$r'r2r	rr7�
memoryviewr#rL�replace�chrr*r&r()rr �cr)r?r�test_basic_re_subYsD
:
8zReTests.test_basic_re_subcCs|�t�ddd�d�dS)Nz
(?P<unk>x)z\g<1>\g<1>\brWzxxxx)r#r'r2)rrrr�test_bug_449964�szReTests.test_bug_449964cCs\|�t�ddd�d�|�t�ddd�d�|�t�ddd�d�|�t�ddd�d�dS)Nz\r\nz\nz
abc
def
zabc
def
z
rV)r#r'r2)rrrr�test_bug_449000�szReTests.test_bug_449000cCsdt�d�}|�ttj|dtj�|�ttj|dtj�|�ttj|dtj�|�ttj|tj�dS)NrR�A)r'r)r&�
ValueErrorrG�IrDr>)rr%rrr�
test_bug_1661�s

zReTests.test_bug_1661cCst�d�dS)Nz(?P<quote>)(?(quote)))r'r))rrrr�
test_bug_3629�szReTests.test_bug_3629cCs�|�t�ddd�d�|�t�ddd�d�|�t�ddd�d�|�t�ddd�d�|�t�dd	d�d
�|�t�ddd�d�|�t�dd
d�d�|�t�ddd�d�|�t�ddd�d�|�t�ddd�d�|�t�ddd�d�|�t�ddd�d�|�t�ddd�d�|�t�ddd�d
�|�t�ddd�d�|�ddddd�|�ddddd�|�dddd d!�|�dd"dd#d!�|�dd$dd%d!�|�dd&dd'd!�|�dd(dd)d!�|�dd*dd d!�|�dd+dd,d!�|�dd-dd.d!�|�dd/dd'd!�|�dd0dd'd!�|�dd1dd)d!�|�dd2dd3d!�|�dd"d4d#d!�|�t�d5d&d�d�|�t�d6d/d7�d8�|�t�d6d0d7�d9�dS):Nrz\0�z\000z\001�z\008z8z\009z9z\111rkz\117�Oz\377�ÿz\1111ZI1z\00z\07�z\08z\09z\0azaz\400z0octal escape value \400 outside of range 0-0o377rz\777z0octal escape value \777 outside of range 0-0o377z\1zinvalid group reference 1rAz\8zinvalid group reference 8z\9zinvalid group reference 9z\11zinvalid group reference 11z\18zinvalid group reference 18z\1az\90zinvalid group reference 90z\99zinvalid group reference 99z\118z\11az\181z\800zinvalid group reference 80�z(((((((((((x)))))))))))z((((((((((y))))))))))(.)rNZxz8Zxza)r#r'r2r4)rrrr� test_sub_template_numeric_escape�sN

z(ReTests.test_sub_template_numeric_escapecCsL|�t�ddd�d�|�t�dddd�d�|�tjddddd�d�dS)NrMr;ZaaaaaZbbbbbrAZbaaaa)rQ)r#r'r2)rrrr�test_qualified_re_sub�szReTests.test_qualified_re_subcCs|�t�ddd�d�dS)Nz(\S)\s+(\S)z\1 \2zhello  therezhello there)r#r'r2)rrrr�test_bug_114660�szReTests.test_bug_114660cCs�t�d�t�d�t�d�|�dd�|�ddd�|�d	d
�|�ddd
�|�ddd�|�ddd�|�ddd�|�dd�|�dd�|�ddd�|�ddd�|�ddd�|�ddd�|�ddd�|�ddd�|�d dd�|�d!dd"�|�d#dd"�|�d$dd"�|�d%d&d"�|�d'd(d"�|�d)dd"�t�d*�t�d+�|�d,d-d�d.�d/d0�td1d2�D��}d3|}|�t�|d4���d5�dS)6Nz(?P<a>x)(?P=a)(?(a)y)z(?P<a1>x)(?P=a1)(?(a1)y)z(?P<a1>x)\1(?(1)y)z(?P<a>)(?P<a>)z6redefinition of group name 'a' as group 2; was group 1z
(?P<a>(?P=a))zcannot refer to an open grouprZz(?Pxy)zunknown extension ?Pxz(?P<a>)(?P=azmissing ), unterminated namer[z(?P=zmissing group name�z(?P=)z(?P=1)zbad character in group name '1'z(?P=a)zunknown group name 'a'z(?P=a1)zunknown group name 'a1'z(?P=a.)z bad character in group name 'a.'z(?P<)zmissing >, unterminated namez(?P<az(?P<z(?P<>)z(?P<1>)z(?P<a.>)z(?(rBz(?())z(?(a))z(?(-1))z bad character in group name '-1'z(?(1a))z bad character in group name '1a'z(?(a.))u(?P<µ>x)(?P=µ)(?(µ)y)uf(?P<𝔘𝔫𝔦𝔠𝔬𝔡𝔢>x)(?P=𝔘𝔫𝔦𝔠𝔬𝔡𝔢)(?(𝔘𝔫𝔦𝔠𝔬𝔡𝔢)y)u	(?P<©>x)u bad character in group name '©'�|css|]}d||fVqdS)z
x(?P<a%d>%x)yNr)�.0�irrr�	<genexpr>�sz/ReTests.test_symbolic_groups.<locals>.<genexpr>rA��z(?:%s)(?(200)z|t)�xc8yz)r�)r'r)r0�join�ranger#rGrE)r�patrrr�test_symbolic_groups�sB




zReTests.test_symbolic_groupsc	Csf|�ddddd�|�ddddd�|�dddd	d
�|�ddddd�|�dd
ddd�|�ddddd�|�ddddd�|�ddddd�|�td��t�ddd�WdQRX|�t�ddd�d�|�t�ddd�d�|�ddddd�|�t�ddd�d�|�t�ddd�d�|�dddd d�d!�d"d#�tdd$�D��}|�t�|d%d&�d'�dS)(Nz(?P<a>x)z\g<arWzmissing >, unterminated namerBz\g<zmissing group namez\gz	missing <�z\g<a a>z!bad character in group name 'a a'z\g<>z\g<1a1>z!bad character in group name '1a1'z\g<2>zinvalid group reference 2z\2rAzunknown group name 'ab'z\g<ab>z(?P<a>x)|(?P<b>y)z\g<b>rsz\g<-1>z bad character in group name '-1'u	(?P<µ>x)u\g<µ>u#(?P<𝔘𝔫𝔦𝔠𝔬𝔡𝔢>x)u \g<𝔘𝔫𝔦𝔠𝔬𝔡𝔢>u\g<©>u bad character in group name '©'rxcss|]}d||fVqdS)z
x(?P<a%d>%x)yNr)ryrzrrrr{sz-ReTests.test_symbolic_refs.<locals>.<genexpr>r|z\g<200>Z	xc8yzxc8yZc8zc8)r4�assertRaisesRegex�
IndexErrorr'r2r#rr�)rr�rrr�test_symbolic_refs�s6








zReTests.test_symbolic_refscCs�|�t�ddd�d�|�t�ddd�d�|�t�ddd�d�|�t�d	dd�d
�|�t�d	ddd�d�|�tjd	dddd
�d�dS)Nz(?i)b+rz	bbbb BBBB)zx xr�zb+)zx BBBBrArN)rNrzb*)Zxxxyxzxrwr�)Zxxxyzr�)rQ)r#r'�subn)rrrr�test_re_subnszReTests.test_re_subncCsZxpdtd�fD]`}|�t�d|�dddddg�|�t�d|�ddddg�|�t�d|�dddddd	dg�qWx|d
td
�td
�td
�fD]`}|�t�d|�dd
dddg�|�t�d|�dd
ddg�|�t�d|�ddd
ddddg�q�Wx|dD]t\}}}d|||f}|�t�d|�d||d|g�|�t�d|�d|||g�|�t�d|�dd|d|d	|g�q�W|�t�dd�ddddg�|�t�dd�dddddddg�|�t�dd�dddddg�|�t�dd�dddddddddddd	dg
�|�t�dd�dddddg�x�dddddddddgfdddddddddgfddddddddddd	dddddgfddddddddddddddddgfgD]6\}}|j|d��|�t�|d�|�WdQRX�q�Wx�ddddddddddg	fd ddddd	ddgfd!dd"d#dd$gfd%dd&d'ddgfgD]6\}}|j|d��|�t�|d�|�WdQRX�qWdS)(Nz:a:b::c�:rsrMr;rez:+z(:+)z::s:a:b::c�:rUr6�b�cs:+s(:+)s::)uàßçuабвu𝒜𝒞𝒵z
:%s:%s::%sz(?::+)z(:)+z([b:]+)z:b::z(b)|(:+)z(?:b)|(?::+)z:*z(?::*)z(:*)z(:)*)�sepz\bz(?=:)z:az:bz:cz(?<=:)za:zb:)	r	r$r'�splitrr7rbr#r*)rr3rMr;rer��expectedrrr�
test_re_split%sZ$0$zReTests.test_re_splitcCs�|�t�ddd�dddg�|�tjdddd�dddg�|�tjdddd�dd	d
g�|�tjdddd�dddddg�|�tjdddd�dddddg�|�tjd
ddd�dddddg�dS)Nr�z:a:b::cr�rsrMzb::c)�maxsplitza:b:c:dr;zc:dz(:)z(:+)z(:*)za:b::c)r#r'r�)rrrr�test_qualified_re_splitZszReTests.test_qualified_re_splitcCs�|�t�dd�g�xbdtd�fD]R}|�t�d|�dddg�|�t�d|�dddg�|�t�d|�d	d
dg�q"Wxndtd�td�td�fD]R}|�t�d
|�dddg�|�t�d|�dddg�|�t�d|�dddg�q�Wx�dD]�}|d}|d}d|||f}|�t�d||�|||g�|�t�d||�|||g�|�t�d||f|�|df||f||fg�q�WdS)Nz:+�abcz
a:b::c:::dr�z::z:::z(:+)z(:)(:*))r�rs)r�r�)r�z::s
a:b::c:::ds:+r�s::s:::s(:+)s(:)(:*))r�rU)r�r�)r�s::)rPuаu𝒜r�rBz
a%sb%sc%sdz%s+z(%s+)z	(%s)(%s*)rs)r#r'r>r	r$rr7rb)rr3rrWrCrrr�test_re_findalles0
zReTests.test_re_findallcCs|�t�dd�dddg�dS)Nz(a|(b))�aba)rMrs)r;r;)r#r'r>)rrrr�test_bug_117612szReTests.test_bug_117612cCs�x�dtd�fD]�}|�t�d|���d�|�t�d|���d�|�t�d|��d�d�|�t�d|��d�d�|�t�d|��dd�d�qWx�dtd�td�td�fD]�}|�t�d|���d�|�t�d	|���d
�|�t�d	|��d�d�|�t�d	|��d�d�|�t�d	|��dd�d�q�Wx�dD]�}|�t�||���d�|�t�d
||���|f�|�t�d
||��d�|�|�t�d
||��d�|�|�t�d
||��dd�||f��q>Wt�	d�}|�|�d���d�|�|�d���d�|�|�d���d�|�|�d���d�|�|�d��d�d�t�	d�}|�|�d��ddd�d�|�|�d��ddd�d�|�|�d��ddd�d �dS)!NrMrz(a))rMrrA)rMrMr6s(a))r6)r6r6)rPuаu𝒜z(%s)z
((a)|(b))(c)?)rMrMNNr;)r;Nr;N�ac)rMrMNre�bc)r;Nr;rers)r;rsr;rez!(?:(?P<a1>a)|(?P<b2>b))(?P<c3>c)?r�rB)rMNN�a1�b2�c3)Nr;N)rMNre)
r	r#r'rG�groupsrJrr7rbr))rr3rMr�rrr�
test_re_match�s:  
*

zReTests.test_re_matchcCs�Gdd�d�}t�dd�}|�|��d�|�|�d�d�|�|�d�d�|�|�|d��d�|�t|jd�|�t|jd	�|�t|jdd
>�|�t|j|dd
>��|�t|jd�|�|�dd�d
�|�|�|d�|d��d
�dS)Nc@seZdZdd�Zdd�ZdS)z!ReTests.test_group.<locals>.IndexcSs
||_dS)N)�value)rr�rrr�__init__�sz*ReTests.test_group.<locals>.Index.__init__cSs|jS)N)r�)rrrr�	__index__�sz+ReTests.test_group.<locals>.Index.__index__N)rrrr�r�rrrr�Index�sr�z(a)(b)�abrrArM���rBi�rr�)r;rM)r'rGr#rJr&r�)rr�rSrrr�
test_group�szReTests.test_groupc	Cs4t�d�}|�d�}|�|dd�|�|dd�|�|dd�|�d�|�d�|�|dd�|�|d	d�|�|d
d�|�|dd�|�td��|d
WdQRX|�td��|dWdQRX|�td��|dWdQRX|�td��|dWdQRX|�td��|dWdQRX|�td��|dWdQRX|�td��d�|�WdQRX|�d�}|�|dd�|�|dd�|�|dd�|�d�|�d�|�|dd�|�|d	d�|�|d
d�|�|dd�|�t��d	|d<WdQRX|�tt	|�dS)Nz!(?:(?P<a1>a)|(?P<b2>b))(?P<c3>c)?rMr�r�r�za1={a1} b2={b2} c3={c3}za1=a b2=None c3=NonerrAr�rBz
no such groupr`r�rw)rrA)rza1={a2}r�reza1=a b2=None c3=c)
r'r)rGr#�
format_mapr�r�r&�	TypeError�len)rr�rSrrr�test_match_getitem�sH


zReTests.test_match_getitemcCs0|�t�dd���d�x,dtd�fD]}|�t�d|���d�q&Wx8dtd�td�td�fD]}|�t�d|���d�q`Wx<dD]4\}}d	|||f}|�t�|||���d�q�W|�t�d
d���d�|�t�d
d���d�|�t�dd���d�|�t�dd���d�|�t�dd���d�|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd���d�|�t�dd���d�|�t�dd���d�|�t�	d�jdddd���d�|�t�	d
�jdddd���d�|�t�	d
�jdddd���d�dS) NrM)rrAr�za|ab)rr�sabsa|ab)uàßuабu𝒜𝒞z%s|%sz.*?$r�)rrBz.*?za.*?b�abbZaxxb)rrwza+zabc$zabc
zabc\Zz(?m)abc$z	ab(?=c)cd�abcdz
ab(?<=b)cdz
(?=a|ab)abr�rArB)r,�endpos)rArB)
r#r'�	fullmatchrEr	rr7rbrFr))rr3rMr;�rrrr�test_re_fullmatch�s4 zReTests.test_re_fullmatchcCsr|�t�dd���d�|�t�dd���d�|�t�dd��|�t�dd��|�t�dd	���d
�|�t�dd���d�|�t�d
d���d�|�t�d
d���d�t�d�}|�|�d���d�|�|�d���d�|�|�d��|�|�d��d�dd�tdd�D��}d|}|�t�|d���d�|�	ddd �|�	d!d"d#�|�	d$d%d �dS)&Nz^(\()?([^()]+)(?(1)\))$z(a))�(rMrM)NrMza)z(az^(?:(a)|c)((?(1)b|d))$r�)rMr;�cd)N�dz^(?:(a)|c)((?(1)|d))$)rMrsz(?P<g1>a)(?P<g2>b)?((?(g2)c|d))r�)rMr;reZad)rMNr�Zabdr�rxcss|]}d||fVqdS)z
x(?P<a%d>%x)yNr)ryrzrrrr{sz2ReTests.test_re_groupref_exists.<locals>.<genexpr>rAr|z(?:%s)(?(200)z)r})rr~z
(?P<a>)(?(0))zbad group numberrZz
()(?(1)a|bz"missing ), unterminated subpatternr�z
()(?(1)a|b|c)z/conditional backref with more than two branches)
r#r'rGr�rFr)rr�rEr0)r�pr�rrr�test_re_groupref_existss<
zReTests.test_re_groupref_existscCs@ddlm}|�dd|dd|d�|�d|d|d	�dS)
Nr)�	MAXGROUPSz()z\g<%s>rWzinvalid group reference %drBz(?P<a>)(?(%d))rZ)�
sre_constantsr�r4r0)rr�rrr�test_re_groupref_overflow(s

z!ReTests.test_re_groupref_overflowcCs�|�t�dd���d�|�t�dd���d�|�t�dd��|�t�dd��|�t�d	d
���d�|�t�dd
���d�|�ddd�dS)Nz^(\|)?([^()]+)\1$z|a|)rxrMz^(\|)?([^()]+)\1?$rM)NrMza|z|az^(?:(a)|c)(\1)$Zaa)rMrMz^(?:(a)|c)(\1)?$re)NNz(abc\1)zcannot refer to an open grouprw)r#r'rGr�rFr0)rrrr�test_re_groupref/szReTests.test_re_grouprefcCs"|�t�dd���ddd��dS)Nz#(?P<first>first) (?P<second>second)zfirst second�first�second)r�r�)r#r'rG�	groupdict)rrrr�test_groupdict=s
zReTests.test_groupdictcCs8|�t�dd��d�d�|�t�dd��d�d�dS)	Nz#(?P<first>first) (?P<second>second)zfirst secondz\2 \1 \g<second> \g<first>zsecond first second firstz#(?P<first>first)|(?P<second>second)r�z
\2 \g<second>� )r#r'rG�expand)rrrr�test_expandBs

zReTests.test_expandcCs8|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��d�d�|�t�d	d��d�d�|�t�d
d��d�d�|�t�dd��d�d�|�t�dd��d�d�|�t�d
d��d�d�|�t�dd��d�d�|�t�dd��d�d�|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�ddd �dS)!Nz	^(\w){1}$r�z
^(\w){1}?$z^(\w){1,2}$z^(\w){1,2}?$z	^(\w){3}$rArez^(\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}$rCz^x{1}?$z^x{1,2}$z	^x{1,2}?$z^x{3}$z^x{1,3}$z^x{3,3}$z^x{1,4}$z	^x{3,4}?$z^x{3}?$z	^x{1,3}?$z	^x{1,4}?$z^x{}$zx{}zx{2,1}z"min repeat greater than max repeatr�)rFr'rGr#rJ�
assertTruer0)rrrr�test_repeat_minmaxLs:zReTests.test_repeat_minmaxc	CsF|�t�d�jd�|�t�d�jtjtjB�|�t�d�jd�|�t�d�ji�|�t�d�jddd��|�t�	dd�j
d�|�t�	dd�jd�|�t�	dd�jd�|�t�	dd�j
d	�|�t�	dd�j�t�d�}|�t|j�d
dg�|�|jdd�|�t��d|jd<WdQRX|�|jdd�dS)Nz
(?i)(a)(b)r�z(?i)(?P<first>a)(?P<other>b)rA)r��otherz(a)rMr))rrA)rrAr�r�)r#r'r)r%�flagsrk�Ur��
groupindexrGr,r�r3�regsr��sortedr&r�)rr�rrr�test_getattrps"
zReTests.test_getattrcCs�|�t�dd��d�d�|�t�dd��d�d�|�t�ddtj��d�d�|�t�ddtj��d�d�|�t�ddtj��d	�d
�|�t�dd
tj��d	�d
�|�t�ddtj��|�t�dd
��d�d�|�t�dd��d�d�|�t�dd
tj��d�d�|�t�ddtj��d�d�|�t�ddtj��d	�d�|�t�ddtj��d	�d�|�t�ddtj��|�t�dd��d	�d�|�t�dd��d	�d�|�t�ddtj��d	�d�|�t�ddtj��d	�d�dS)Nz\b(b.)\bzabcd abc bcd bxrAZbxz\B(b.)\Bzabc bcd bc abxdz^abc$z
abc
rr�z	^\Aabc\Z$s\b(b.)\bsabcd abc bcd bxsbxs\B(b.)\Bsabc bcd bc abxds^abc$s
abc
sabcs	^\Aabc\Z$z\d\D\w\W\s\Sz1aa! as\d\D\w\W\s\Ss1aa! a)r#r'rDrJ�ASCII�MrF�LOCALE)rrrr�test_special_escapes�s<











zReTests.test_special_escapesc
CsP|�ddd�|�t�dd���d�|�t�dd��|�t�dd���d�|�t�dd	���d	�|�t�dd
��|�t�dd���d�|�t�dd
��|�t�dd���d�|�t�dd
��t��x8dD]0}|�|��|�tj	tj
d|�WdQRXq�Wx:dD]2}|�|��|�tj	tj
d|�WdQRX�qWdS)NrXzbad escape (end of pattern)rz\(r��)z\\z[\]]�]�[z[a\-c]�-r;z[\^a]+za^Z!ceghijklmopqyzCEFGHIJKLMNOPQRTVXYz\%cZ$ceghijklmopqyzABCEFGHIJKLMNOPQRTVXYZz[\%c])r0r#r'rGrJrF�purger*r&r(r))rrerrr�test_other_escapes�s"
$
zReTests.test_other_escapescCs�|�t�dd��d�d�|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�tt�	dd��d�|�tt�	dd��d	�|�tt�	dd
��d	�|�tt�	dd��d	�|�tt�	dd
��d�dS)Nz	\b(abc)\br�rAz\bz\BrsrMr�rr�z   )
r#r'rDrJr�rG�assertFalserFr�r>)rrrr�test_string_boundaries�szReTests.test_string_boundariesc	CsR|�t�dd��d�d�dd�tttddd���}|�t�|d	���d	�dS)
Nu
([∢∣])u∢rAz[%s]rs�i�u!)r#r'rGrJr�maprdr�)rr�rrr�test_bigcharset�s
zReTests.test_bigcharsetcCsBt�d�dd�td�D���}|�|�d��|�|�d��dS)Nrxcss|]}d|VqdS)z%dNr)ryrrrrr{�sz,ReTests.test_big_codesize.<locals>.<genexpr>i'Z1000Z9999)r'r)rr�r�rG)rr�rrr�test_big_codesize�szReTests.test_big_codesizecCs@|�t�ddtj��d�d�|�t�ddtj��d�d�dS)Nza.bza
brza.*bza

b)r#r'rG�DOTALLrJ)rrrr�test_anyall�szReTests.test_anyallcCs�|�t�dd��d�d�|�t�dd��d�d�|�t�dd��d�d�|�t�dd��d�d�|�t�d	d
��d�d�|�t�dd��d�d�|�t�d
d
��d�d�|�t�dd
��d�d�|�t�dd��d�d�|�t�dd��d�d�|�t�dd��d�d�|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��dS)Nz
(a(?=\s[^a]))za brArMz(a(?=\s[^a]*))z(a(?=\s[abc]))z(a(?=\s[abc]*))za bcz(a)(?=\s\1)za az(a)(?=\s\1*)za aaz(a)(?=\s(abc|a))z
(a(?!\s[^a]))z(a(?!\s[abc]))za dz(a)(?!\s\1)z(a)(?!\s(abc|a))z(a)b(?=\1)ar�z(a)b(?=\1)cZabacz(?:(a)|(x))b(?=(?(2)x|c))cr�z(?:(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))r#r'rGrJr�rF)rrrr�test_lookahead�s*zReTests.test_lookaheadcCsl|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd	��|�t�d
d��|�t�dd	��|�t�dd��|�t�d
d��|�t�dd��|�t�dd��|�t�dd��|�tjtjd�|�t�dd��|�t�dd��|�tjtjd�|�tjtjd�|�tjtjd�|�tjtjd�dS)Nz	ab(?<=b)cr�z	ab(?<=c)cz	ab(?<!b)cz	ab(?<!c)cz(a)a(?<=\1)cZaacz(a)b(?<=\1)aZabaaz(a)a(?<!\1)cz(a)b(?<!\1)az(?:(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)b(?<=(?(2)b|x))(c)z(a)b(?<=(?(1)c|x))(c)z(a)b(?<=(?(1)b|x))(c)z(a)b(?<=(.)\2)(c)z(a)b(?<=(?P<a>.)(?P=a))(c)z(a)b(?<=(a)(?(2)b|x))(c)z(a)b(?<=(.)(?<=\2))(c))r�r'rGrFr&r(r))rrrr�test_lookbehinds(zReTests.test_lookbehindcCs|�t�ddtj��d�d�|�t�ddtj��d�d�|�t�ddtj��d�d�|�t�d	d
tj��d�d
�|�t�ddtj��d�d�|�t�dd
tj��d�d
�|�t�d
dtj��d�d�|�t�ddtj��d�d�|�t�ddtj��d�d�|�t�ddtj��d�d�|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��dS)Nr��ABCrsabcsABCz	(a\s[^a])za brAz
(a\s[^a]*)za bbz
(a\s[abc])z(a\s[abc]*)z	((a)\s\2)za az
((a)\s\2*)za aaz((a)\s(abc|a))z((a)\s(abc|a)*)�KuK�kz\u212ar	uſr?z\u017fz\ufb05ustz\ufb06uſt)r#r'rGrkrJr�)rrrr�test_ignore_cases(zReTests.test_ignore_casecCs�|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�d	d
tj��|�t�dd
tj��|�t�dd
tj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��dS)Nz[19A]riz[19a]rMs[19A]�As[19a]r6z[19K]uKz[19k]z
[19\u212a]r�r�z[19S]uſz[19s]z
[19\u017f]r	r?z
[19\ufb05]ustz
[19\ufb06]uſt)r�r'rGrk)rrrr�test_ignore_case_set5s$zReTests.test_ignore_case_setcCs@|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�dd	tj��|�t�d
d	tj��|�t�d
dtj��|�t�ddtj��|�t�dd
tj��|�t�ddtj��|�t�dd
tj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�ddtj��|�t�dd tj��|�t�d!d"tj��dS)#Nz[9-a]�_z[9-A]s[9-a]�_s[9-A]z[\xc0-\xde]�×�÷z[\xe0-\xfe]z[\u0430-\u045f]uѐuЀz[\u0400-\u042f]z[\U00010428-\U0001044f]u𐐨u𐐀z[\U00010400-\U00010427]z[J-M]uKz[j-m]z[\u2129-\u212b]r�r�z[R-T]uſz[r-t]z[\u017e-\u0180]r	r?z[\ufb04-\ufb05]ustz[\ufb06-\ufb07]uſt)r�r'rGrkrF)rrrr�test_ignore_case_rangeLs4zReTests.test_ignore_case_rangecCs|�t�dd��d�d�dS)Nz(\s)r�rA)r#r'rGrJ)rrrr�
test_categorymszReTests.test_categorycCsxddl}xvtd�D]j}t|�}t|���}|�|�|�|�|�|�|�|�|tj	k}|�|�
|�|�|�|�|�|�qWx�ttdd��ddgD]�}t|�}|�|�|�|�|dkr�|�|�|�t|����||��kp�||�
�k}|�|�
|��|�|�|�||��k�p$||�
�k�q�W|�|�d�d�|�|�d�td��|�|�
d��|�|�d��dS)Nr�iii(i0rz)�_srer�rd�ord�lowerr#�
ascii_tolower�unicode_tolowerr3�
ascii_letters�
ascii_iscased�unicode_iscasedr�upperr�r�)rr�rzre�lo�iscasedrrr�test_case_helpersps,
 zReTests.test_case_helperscCs8|�t�dd��d�d�|�t�dd��d�d�dS)Nz\s([^a])z brAr;z	\s([^a]*)z bbZbb)r#r'rDrJ)rrrr�test_not_literal�szReTests.test_not_literalc	Cs�ttd����}|�t��t�d�}WdQRX|�|�|�t	d��|�t�d|�t	d��|�t��t�d�}WdQRX|�|�|�t	d��|�t��t�d�}WdQRX|�|�|�t	d	��|�t��t�d
�}WdQRX|�|�|�t	d��|�t��t�d�}WdQRX|�|�|�t	d��|�t�d
|�t	d��|�t��t�d�}WdQRX|�|�|�t	d��|�t��t�d�}WdQRX|�|�|�t	d��|�t�d|�t	d��|�t��t�d�}WdQRX|�|�|�t	d��|�t��t�d�}WdQRX|�|�|�t	d��|�t�d|�t	d��|�t��t�d�}WdQRX|�|�|�t	d��|�t��t�d�}WdQRX|�|�|�t	d��dS)Nr�z[0-9--1]z
-./0123456789z[--1]z-./01z[%--1]z
%&'()*+,-1z[%--]z	%&'()*+,-z[0-9&&1]z&0123456789z[\d&&1]z[&&1]z&1z[0-9||a]z0123456789a|z[\d||a]z[||1]z1|z[0-9~~1]z0123456789~z[\d~~1]z[~~1]z1~z[[0-9]|]z0123456789[]z[[:digit:]|]z:[]dgit)
�bytesr��decode�assertWarns�
FutureWarningr'r)r#r>r)rr?r�rrr�test_possible_set_operations�sLz$ReTests.test_possible_set_operationscCs8|�t�dd��d�d�|�t�dd��d�d�dS)Nz\s(b)z brAr;za\sza r)r#r'rDrJ)rrrr�test_search_coverage�szReTests.test_search_coveragecCsr|dkr"|dkr"|}dt|�f}n|dks2|dkr:td��|||�}|�|�|�|��|�|�|��|�dS)Nrz@If match is not None, span should be specified (and vice versa).)r�rjr�r#rJrE)rr%�textrGrEZmatcherrSrrr�assertMatch�s

zReTests.assertMatchz!"%',/:;<=>@_`cCs�d�dd�td�D��}xN|D]F}|�t�|�|�|�dt�|�d|�|�dt�|�|�qW|�t�|�|�x&dD]}|�t�|�dd	�d
�q�W|j}|�t�|�|�dS)Nrscss|]}t|�VqdS)N)rd)ryrzrrrr{�sz)ReTests.test_re_escape.<locals>.<genexpr>r�r�r�z(?x)z-.]{}rArX)rr�r�r'�escaper#�
LITERAL_CHARS)rr�re�
literal_charsrrr�test_re_escape�s

zReTests.test_re_escapecCs�ttd��}xX|D]P}t|g�}|�t�|�|�|�dt�|�d|�|�dt�|�|�qW|�t�|�|�x0dD](}t|g�}|�t�|�dd�d�q~W|j�d�}|�t�|�|�dS)	Nr��[�]s(?x)s-.]{}rA�\�ascii)r�r�r�r'r�r#r�encode)rr�rzr;rrrr�test_re_escape_bytes�s



zReTests.test_re_escape_bytescCsHd}t�|�}|�||�|�||�|�dt�d�|ddtj�dS)Nuxxx☠☠☠xxxz.%s+.u☠ux☠☠☠x)r�r^)r'r�r#r�rD)rr?Z	s_escapedrrr�test_re_escape_non_ascii�s
z ReTests.test_re_escape_non_asciicCsXd�d�}t�|�}|�||�|�||�t�t�d�d��|�}|�t|�d�dS)Nu	y☠y☠yzutf-8u☠r�)rr'r�r#r�r>r�)rr;Z	b_escapedZresrrr�test_re_escape_non_ascii_bytes�s

z&ReTests.test_re_escape_non_ascii_bytescCs`ddl}t�dtj�}x8t|jd�D]&}|�||�}|�|�}|�||�q&Wddlm	}dS)Nrza(?:b|(c|e){1,2}?|d)+?(.)rA)�_compile)
�pickler'r)�UNICODEr�ZHIGHEST_PROTOCOL�dumps�loadsr#r)rrZoldpat�protoZpickledZnewpatrrrr�
test_pickling�s
zReTests.test_picklingcCshddl}t�d�}|�|�|�|�|�|�|�|�|�d�}|�|�|�|�|�|�|�|�dS)Nrz (?P<int>\d+)(?:\.(?P<frac>\d*))?z12.34)�copyr'r)rZdeepcopyrG)rrr�rSrrr�test_copyings

zReTests.test_copyingcCsT|�tjtj�|�tjtj�|�tjtj�|�tjtj	�|�tj
tj�dS)N)r#r'rk�
IGNORECASE�Lr�r��	MULTILINEr	r�r`�VERBOSE)rrrr�test_constants
s
zReTests.test_constantscCstx6tjtjtjtjtjtjgD]}|�t�d|��qWx6tjtjtjtjtjtj	gD]}|�t�d|��qVWdS)Nz	^pattern$s	^pattern$)
r'rkr�r`r	rir�r�r)r)r�flagrrr�
test_flagss""zReTests.test_flagscCsF�xxdD�]n}|dkr�|�t�d|t|���|�t�d|t|�d��|�t�d|t|�d��|�t�d|t|���|�t�d	|t|�d��|�t�d
|t|�d��|dk�r"|�t�d
|t|���|�t�d|t|�d��|�t�d|t|�d��|�t�d|t|���|�t�d|t|�d��|�t�d|t|�d��qW|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�ddd�|�ddd �|�d!d"d�|�d#d"d�|�d$d%d�|�d&d%d�|�d'd(d�|�d)d(d�|�d*d+d�dS),N)rr_�� �@�r�r�r�i��ii��r�z\%03oz\%03o0�0z\%03o8�8z\x%02xz\x%02x0z\x%02xz�ziz\u%04xz\u%04x0z\u%04xzz\U%08xz\U%08x0z\U%08xzz\0rnz\08z8z\01roz\018z8z\567z0octal escape value \567 outside of range 0-0o377rz\911zinvalid group reference 91rAz\x1zincomplete escape \x1z\x1zz\u123zincomplete escape \u123z\u123zz	\U0001234zincomplete escape \U0001234z
\U0001234zz
\U00110000zbad escape \U00110000)r�r'rGrdr0)rrzrrr�test_sre_character_literalss<
"z#ReTests.test_sre_character_literalscCs�x�dD�]�}|dkr�|�t�d|t|���|�t�d|t|���|�t�d|t|���|�t�d|t|���|�t�d|t|���|�t�d|t|���|�t�d	|t|���|�t�d
|t|���|dk�r>|�t�d|t|���|�t�d
|t|���|�t�d|t|���|�t�d|t|���|�t�d|t|�d��|�t�d|t|�d��qW|�ddd�|�ddd�|�ddd�|�ddd�|�ddd�|�dd d�|�t�d!d"��dS)#N)rr_rrrrr�r�r�i��ii��r�z[\%o]z[\%o8]z[\%03o]z[\%03o0]z[\%03o8]z[\x%02x]z	[\x%02x0]z	[\x%02xz]iz[\u%04x]z	[\u%04x0]z	[\u%04xz]z[\U%08x]z	[\U%08x0]rz	[\U%08xz]r!z[\567]z0octal escape value \567 outside of range 0-0o377rAz[\911]z
bad escape \9z[\x1z]zincomplete escape \x1z[\u123z]zincomplete escape \u123z[\U0001234z]zincomplete escape \U0001234z[\U00110000]zbad escape \U00110000z[\U0001d49c-\U0001d4b5]u𝒞)r�r'rGrdr0)rrzrrr�!test_sre_character_class_literals:s4
"z)ReTests.test_sre_character_class_literalscCs�x�dD]�}|�t�d|��t|g���|�t�d|��t|g�d��|�t�d|��t|g�d��|�t�d|��t|g���|�t�d|��t|g�d��|�t�d	|��t|g�d
��qW|�tjtjd�|�tjtjd�|�t�d
d��|�t�dd��|�t�dd��|�t�dd��|�ddd�|�ddd�|�ddd�|�ddd�dS)N)rr_rrrrr�r�z\%03oz\%03o0�0z\%03o8�8z\x%02xz\x%02x0z\x%02xz�zs\u1234s
\U00012345s\0�s\08s8s\01�s\018s8s\567z0octal escape value \567 outside of range 0-0o377rs\911zinvalid group reference 91rAs\x1zincomplete escape \x1s\x1z)	r�r'rGrr�r&r(r)r0)rrzrrr�test_sre_byte_literalsVs&
 $$ $(zReTests.test_sre_byte_literalscCsd�xdD�]}|�t�d|��t|g���|�t�d|��t|g���|�t�d|��t|g���|�t�d|��t|g���|�t�d|��t|g���|�t�d|��t|g���|�t�d|��t|g���|�t�d	|��t|g���qW|�tjtjd
�|�tjtjd�|�dd
d�|�ddd�|�ddd�dS)N)rr_rrrrr�r�z[\%o]z[\%o8]z[\%03o]z[\%03o0]z[\%03o8]z[\x%02x]z	[\x%02x0]z	[\x%02xz]s[\u1234]s[\U00012345]s[\567]z0octal escape value \567 outside of range 0-0o377rAs[\911]z
bad escape \9s[\x1z]zincomplete escape \x1)	r�r'rGrr�r&r(r)r0)rrzrrr�test_sre_byte_class_literalsks        $z$ReTests.test_sre_byte_class_literalscCsf|�ddd�|�ddd�|�ddd�|�ddd�|�ddd	�|�d
dd	�|�dd
d	�dS)Nr�zunterminated character setrz[^z[az[a-z[\w-b]zbad character range \w-brAz[a-\w]zbad character range a-\wz[b-a]zbad character range b-a)r0)rrrr�test_character_set_errors}sz!ReTests.test_character_set_errorscCsR|�t�dd��d�d�|�t�dd��d�d�|�t�dd��d�d�dS)Nz(a)|(b)r;rAr�)r�r�)r#r'rG�start�endrE)rrrr�test_bug_113254�szReTests.test_bug_113254cCsp|�t�dd�j�|�t�dd�jd�|�t�dd�jd�|�t�dd�jd�|�t�dd�jd�dS)	Nz(a)?arMz(a)(b)?br�rAz(?P<a>a)(?P<b>b)?bz(?P<a>a(b))z((a)))rFr'rG�	lastindexr#�	lastgroup)rrrr�test_bug_527371�s
zReTests.test_bug_527371cCs�|�t�dddd��d�d�|�t�dddd	ddd
��d�d�|�t�ddd
d��d�d�|�t�dddd��d�d�dS)Nz.*?ci'r�r�ri!Nz.*?cdi�reZcdei#Ni Nr��deia�z(a|b)*?c)r#r'rGr-rD)rrrr�test_bug_418626�s
"("zReTests.test_bug_418626cCs,dt�d�d}|�t�|�o"dd�dS)Nr�u‹r�rA)r'r�r#r))rr�rrr�test_bug_612074�szReTests.test_bug_612074cCsf|�t�ddd��d�d�|�t�dddd��d�d�|�t�dddd��d�d�dS)Nz(x)*iP�rrAz(x)*yr z(x)*?y)r#r'rGrJ)rrrr�test_stack_overflow�s"zReTests.test_stack_overflowcCsLxFdD]>}x8dD]0}|�d||fdd�|�d||fdd�qWqWdS)N)�*�+�?z{1,2})rsr8z%s%sznothing to repeatrz(?:%s%s)rB)r0)r�reps�modrrr�test_nothing_to_repeat�s

zReTests.test_nothing_to_repeatcCsjxddD]\}xVdD]N}||}x@dD]8}x2dD]*}||}|�d||fddt|��q,Wq"WqWqWdS)N)r6r7z{1,2})rsr8)r6r7r8z{1,2}zx%s%szmultiple repeatrA)r0r�)rZ
outer_repsZ	outer_mod�outer_opZ
inner_repsZ	inner_mod�inner_oprrr�test_multiple_repeat�s



zReTests.test_multiple_repeatcCsp|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��dS)Nz(?:a?)*yr!z(?:a?)+yz(?:a?){2,}yz	(?:a?)*?yz	(?:a?)+?yz(?:a?){2,}?y)rFr'rG)rrrr� test_unlimited_zero_width_repeat�sz(ReTests.test_unlimited_zero_width_repeatcCs�dd�}dd�}dd�}dd�}td	|fd
|fd|fd|fd
g�}|�|j�d�j�|�|�d�dddddddddg	df�dS)NcSs|S)Nr)�scanner�tokenrrr�s_ident�rUz%ReTests.test_scanner.<locals>.s_identcSsd|S)Nzop%sr)r@rArrr�
s_operator�rUz(ReTests.test_scanner.<locals>.s_operatorcSst|�S)N)�float)r@rArrr�s_float�rUz%ReTests.test_scanner.<locals>.s_floatcSst|�S)N)rI)r@rArrr�s_int�rUz#ReTests.test_scanner.<locals>.s_intz[a-zA-Z_]\w*z\d+\.\d*z\d+z=|\+|-|\*|/)z\s+Nrszsum = 3*foo + 312.50 + bar�sumzop=rBzop*�foozop+g�s@Zbar)rr�r@r%r#�scan)rrBrCrErFr@rrr�test_scanner�szReTests.test_scannercCsJxDdD]<}|�t�d|d���d�|�t�d|d���d�qWdS)N)rsr8r6z
((.%s):)?zr!)NNza:z)za:rM)r#r'rGr�)r�oprrr�test_bug_448951�s

zReTests.test_bug_448951cCs�|�t�dd���d�|�t�dd���d�|�t�dd���d�|�t�dd���d�|�t�d	d���d�|�t�d
d���d�|�t�dd���d�|�t�d
d���d�dS)Nz	^((a)|b)*r�)r;rMz^(([ab])|c)*)rer;z^((d)|[ab])*)r;Nz
^((a)c|[ab])*z^((a)|b)*?cz^(([ab])|c)*?dr�z^((d)|[ab])*?cz^((a)c|[ab])*?c)r#r'rGr�)rrrr�test_bug_725106�s zReTests.test_bug_725106cCs4|�t�dd���d�|�t�dd���d�dS)Nz(a)(?:(?=(b)*)c)*r�)rMNz(a)((?!(b)*))*)rMNN)r#r'rGr�)rrrr�test_bug_725149�szReTests.test_bug_725149cCs2Gdd�dt�}t�|d��}|�|�d��dS)Nc@seZdZdS)z+ReTests.test_bug_764548.<locals>.my_unicodeN)rrrrrrr�
my_unicodesrOr�rN)rKr'r)rFrG)rrOr�rrr�test_bug_764548�szReTests.test_bug_764548cCst�dd�}|�dd�|D�dddg�t�d�}|�ddd	�}|�d
d�|D�dddg�t�d�}|jddd	d�}|�dd�|D�dddg�t�d�}|jdd	dd
�}|�dd�|D�dddg�t�d�}|jdddd�}|�dd�|D�ddg�dS)Nz:+z
a:b::c:::dcSsg|]}|�d��qS)r)rJ)ry�itemrrr�
<listcomp>sz)ReTests.test_finditer.<locals>.<listcomp>r�z::z:::rArZcSsg|]}|�d��qS)r)rJ)ryrQrrrrRs)r,r�cSsg|]}|�d��qS)r)rJ)ryrQrrrrRs)r�r,cSsg|]}|�d��qS)r)rJ)ryrQrrrrRsrBr_cSsg|]}|�d��qS)r)rJ)ryrQrrrrRs)r'r8r#r))r�iterr�rrr�
test_finditers&



zReTests.test_finditercCs|�t�d�t�d��dS)NZ
bug_926075s
bug_926075)ZassertIsNotr'r))rrrr�test_bug_926075szReTests.test_bug_926075cCs&d}|�t�|��d�dddg�dS)Nu[.。.。]za.b.crMr;re)r#r'r)r�)rr%rrr�test_bug_931848!szReTests.test_bug_931848cCsdt�dd�}|�t|���d�|�tt|�t�d��d�}|�|�	���d�|�
|�	��dS)Nz\sza b)rAr�)r'r8r#�nextrEr&�
StopIterationr)r@rDrF)rrSr@rrr�test_bug_581080&szReTests.test_bug_581080cCsFt�dd�}|�t|���d�|�t|���d�|�tt|�dS)Nz.*Zasdf)rrw)rwrw)r'r8r#rWrEr&rX)rrSrrr�test_bug_817234/szReTests.test_bug_817234cCsbdddg}x&|D]}|�t�d|��d�|�qWdddd	g}x|D]}|�t�d|��qDWdS)
N�7u๘u0z^\d$ruⅥu〹u₂u㊴)r#r'rGrJrF)rZdecimal_digitsrZnot_decimal_digitsrrr�
test_bug_65615s

zReTests.test_bug_6561cCsVddl}xHdD]@}|�|�}|�t�d��|��|�t�d��|���d�qWdS)NrZbBuhHiIlLfdsblarUr)�arrayrFr'r)rGr#r�)rr]�typecoderMrrr�test_empty_arrayJs


zReTests.test_empty_arrayc
Csd}d}t�d|tjtjB�}|�d|�}|�|�t�d|tjtjB�}|�d|�}|�|�t�d|tj�}|�d|�}|�|�t�d|tj�}|�d|�}|�|�t�d|�}|�d|�}|�|�t�d|�}|�d|�}|�|�t�d|�}|�d|�}|�|�t�d|�}|�d|�}|�|�|�t�d||��|�t�d||��|�t�d	||tj��|�t�d
||��|�t�d||tj��|d}|�t��}|�t�||��WdQRX|�	t
|jd
j�d|�|�	|jd
j
t�|dd}|�t��}|�t�||��WdQRX|�	t
|jd
j�d|dd��|�	|jd
j
t�t���nt�dt�d}|�t��}|�t�|d��WdQRX|�	t
|jd
j�d|�|�	|jd
j
t�WdQRX|�t�� |�t�d|d|��WdQRX|�t�� |�t�d|d|��WdQRX|�t��|�t�d||��WdQRX|�t��|�t�d||��WdQRX|�t��|�t�d||��WdQRX|�t�� }|�t�d|d|��WdQRX|�t
|jd
j�d�|�	|jd
j
t�|�t�� }|�t�d|d|��WdQRX|�t
|jd
j�d�|�	|jd
j
t�|�t�� }|�t�d|d|��WdQRX|�t
|jd
j�d�|�	|jd
j
t�dS) NuẠuạrRrVz(?i).z(?is).z	(?s)(?i).z(?ix) z (?i) z
(?x) (?i) z (?x) (?i) z(?i)rz+Flags not at the start of the expression %rz(?i)%sz�.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?.?z7Flags not at the start of the expression %r (truncated)�r(sA(?i)r6z	(?s).(?i)z(?i) z (?x)z^(?i)z$|(?i)z(?:(?i)r�zFlags not at the startz
(^)?(?(1)(?i)z($)?(?(1)|(?i))r'r)rkr	rGr�r`r��DeprecationWarningr#rK�warnings�message�filename�__file__�catch_warnings�simplefilter�BytesWarning�assertRegexr�)rZ
upper_charZ
lower_charr��qZwarnsrrr�test_inline_flagsRs�










$$   $zReTests.test_inline_flagscCs�t�d�}|�|�dd�d�|�|�dd�d�|�|�dd�d�t�dtj�}|�|�dd�d	�|�|�dd�d
�|�|�dd�d�dS)N�$�#za
b
za
b#
#za
b
cza
b
c#rVz#
#za#
b#
#za#
b#
c#)r'r)r#r2r)rr%rrr�test_dollar_matches_twice�s
z!ReTests.test_dollar_matches_twicecCs�t�d�}t�d�}|�t|jd�|�t|jd�|�t|jdd�|�t|jdd�|�t|jdd�|�t|jdd�|�t|jdd�|�t|jdd�dS)NrR�.r�r;rer�)r'r)r&r�rGr2)rr��bpatrrr�test_bytes_str_mixing�s

zReTests.test_bytes_str_mixingcCs�xPdtjfD]B}t�d|tjB�}|�|�d��t�d|�}|�|�d��qWt�dtjtjB�}|�|�d��t�dtj�}|�|�d��t�dtj�}|�|�d��t�d�}|�|�d��xPdtjfD]B}t�d|tjB�}|�|�d��t�d	|�}|�|�d��q�W|�t	tjd	tj�|�tj
tjd
�|�t	tjdtjtjB�|�t	tjdtj�|�t	tjdtj�|�tj
tjd�dS)
Nr�ÀrPz\wu(?a)Àz(?a)\w����s\ws(?u)\wz(?u)\wz(?au)\w)r'r
r)rr�rGr�rFr&rjr()rr�r�rrr�test_ascii_and_unicode_flag�s0
z#ReTests.test_ascii_and_unicode_flagc	
Cs$t�tjd�}t�tjd�|�tjtj|�t�d�}x�tdd�D]~}y`t|g��|�}|��}||krlwD|�	|�}t
|�dkr�wD|�|�|kr�wDt�t|g��}PWqDt
tfk
r�YqDXqDWd}d}t�|tjtjB�}|r�|�|�|��t�d|tj�}|�r|�|�|��t�|tj�}|�rB|�|�|��t�dtj�}|�rf|�|�|��t�d	�}|�r�|�|�|��t�d�}|�r�|�|�|��|�ttjdtj�|�tjtjd
�|�ttjdtjtjB�|�ttjdtj�|�ttjdtj�|�tjtjd
�dS)NrsFr�r�rAr�s(?L)s\ws(?L)\wz(?L)rUs(?a)s(?aL))�locale�	setlocale�LC_CTYPE�
addCleanup�getpreferredencodingr�r�r�r�rr�r'r��UnicodeErrorr�r)r�rr�rGrFr&rjr(r�)	r�oldloc�encrzreZsletterZbletterrpr�rrr�test_locale_flag�sZ




zReTests.test_locale_flagcCs�|�t�dd��|�t�dd��|�t�ddtj��|�t�ddtj��|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�d	d
tj��|�t�d	dtj��|�t�dd
��|�t�dd
��|�t�dd
tj��|�ddd�|�ddd�|�ddd�|�ddd�|�ddd�|�ddd�|�ddd�|�d d!d�|�d"d!d�|�d#d!d�|�d$dd�|�d%d&d'�|�d(d)d�|�d*d)d�|�d+dd�dS),Nz(?i:a)bZAbZaBz(?-i:a)bz
(?i:(?-i:a)b)z	(?x: a) bza bz a bz
(?-x: a) bz abr�z\w(?a:\W)\wuàààz(?a:\W(?u:\w)\W)z\W(?u:\w)\Wz(?a)(?-a:\w)z8bad inline flags: cannot turn off flags 'a', 'u' and 'L'r_z(?i-i:a)z(bad inline flags: flag turned on and offr~z(?au:a)z9bad inline flags: flags 'a', 'u' and 'L' are incompatiblerws(?aL:a)z(?-zmissing flagrBz(?-+z(?-zzunknown flagz(?-iz	missing :z(?-i)z(?-i+z(?-izz(?i:z"missing ), unterminated subpatternrz(?izmissing -, : or )z(?i+z(?iz)r�r'rGrFrrr�r0)rrrr�test_scoped_flags&s@zReTests.test_scoped_flagscCs�t�d�}|�|�dd�d�t�d�}|�|�dd�d�t�d�}|�|�d	d
�d�d�t�d
�}|�|�dd�d�t�d�}|�|�dd�d�t�d�}|�|�dd
�d�d�dS)Nza(\w)zb\1r�r�za(.)uaሴubሴz..cSsdS)NrKr)rSrrrrTTrUz'ReTests.test_bug_6509.<locals>.<lambda>Za5rKsa(\w)sb\1sacsbcsa(.)sa�sb�s..cSsdS)Nsbytesr)rSrrrrT\rUsa5sbytes)r'r)r#r2)rr�rrr�
test_bug_6509Ls





zReTests.test_bug_6509c	Cs|ddl}dd}|�ttjdi�|�t��|�dd|gdid�WdQRX|�t��|�idgdgg�WdQRXdS)Nrr�r�rMr�r)r�r&r�r'r8�
OverflowErrorr))rr�Z
long_overflowrrr�test_dealloc^s zReTests.test_dealloccCs^|�t�dd��|�t�dd��|�t�dd��|�t�dd��|�t�dd��dS)Nz123.*-z123abc-u123é-u123€-u123􏿿-u
123é€􏿿-)r�r'rD)rrrr�test_search_dot_unicodels
zReTests.test_search_dot_unicodecCsPt�d�}|�|tj�t�|�}|�|tj�|�||�|�ttjd�dS)Nzrandom patternr)r'r)�assertIsInstance�Patternrr&r�)rr%Zsame_patternrrr�test_compiless

zReTests.test_compilerA)�sizeZmemusecCsBd|}t�d|�}|�|�|�|��|�|�|��|�dS)NrMrl)r'rDZassertIsNotNoner#r,r-)rr�r?rSrrr�test_large_search}s

zReTests.test_large_search�cCs:d|}t�dd|�\}}|�||�|�||d�dS)NrMrsrA)r'r�r#)rr�r?r��nrrr�test_large_subn�szReTests.test_large_subncCs2|�t�dd�dg�|�t�dd���d�dS)Nz	(?i)(a)\1uaa ĀrMz
(?s).{1,3}uĀĀ)rr�)r#r'r>rGrE)rrrr�test_bug_16688�szReTests.test_bug_16688cCsdd}|�t�d|���d�|�t�d|���d�|�t�d|���d�|�t�d|���d�|�t�d	|���d�|�t�d
|���d�|�ttjddd
�|�ttjddd
�|�ttjddd
�|�ttjddddd
f�dS)Nri��z.{65535})ri��z	.{,65535}z
.{65535,}?z.{65536})riz	.{,65536}z
.{65536,}?z.{%d}r�r�z.{,%d}z.{%d,}?z.{%d,%d}�)r#r'rGrEr&r�r))rr3rrr�test_repeat_minmax_overflow�sz#ReTests.test_repeat_minmax_overflowcCs�yddlm}Wntk
r.|�d�YnXdd}|�t�d|d|��|�t�d|d|���d	�|�t�d
|d|��|�	t
tjd|�|�	t
tjd|�|�	t
tjd
|�dS)Nr)�	MAXREPEATz requires _sre.MAXREPEAT constantri��z.{%d}rAz.{,%d})ri��z.{%d,}?)r�r��ImportError�skipTestrFr'rGr#rEr&r�r))rr�r3rrr�%test_repeat_minmax_overflow_maxrepeat�sz-ReTests.test_repeat_minmax_overflow_maxrepeatcCs|�ddd�dS)Nz
(?P=<foo>)z#bad character in group name '<foo>'rw)r0)rrrr�$test_backref_group_name_in_exception�sz,ReTests.test_backref_group_name_in_exceptioncCs|�ddd�dS)Nz
(?P<?foo>)z"bad character in group name '?foo'rw)r0)rrrr�test_group_name_in_exception�sz$ReTests.test_group_name_in_exceptioncCs|xvdD]n}xhdD]`}d||d}|jt�|tj��d�dg|d�|��}|jt�|tj��d�dg|d�qWqWdS)N)r6r7r8z{1})rsr8rRZyzrN)r!sxyz)r#r'r)r	r>r)rr9r:r%rrr�test_issue17998�s

zReTests.test_issue17998cCsxHdtd�fD]8}t�d|�}dt|�jt|�jf}|�t|�|�qWxTdtd�t	d�t
d�fD]8}t�d|�}dt|�jt|�jf}|�t|�|�qdWtt�dd��\}}d	t|�jt|�jf}|�t|�|�d
t|�jt|�jf}|�t|�|�dS)Nz
[abracadabra]z(.+)(.*?)\1z7<(%s\.)?%s object; span=\(1, 12\), match='abracadabra'>s
[abracadabra]s(.+)(.*?)\1z8<(%s\.)?%s object; span=\(1, 12\), match=b'abracadabra'>z	(aa)|(bb)zaa bbz-<(%s\.)?%s object; span=\(0, 2\), match='aa'>z-<(%s\.)?%s object; span=\(3, 5\), match='bb'>)
r	r'rDrrrri�reprrr7rbrr8)rr3rSr%r�r�rrr�test_match_repr�s&
zReTests.test_match_reprc	CsL|�t�dd�dddddg�|�t�dd�ddddddg�|�t�dd�ddddg�|�t�d	d�ddddg�|�t�dd
d�d�|�t�dd
d�d�|�t�d
dd�d�|�t�dd�dddddg�|�t�dd�ddddddg�|�dd�t�dd�D�dddddg�|�dd�t�dd�D�ddddddg�dS)Nz\bza::bcrsrMz::r�z\b|:+z(?<!\w)(?=\w)|:+z(?<=\w)(?!\w)|:+r�z	-a-::-bc-z-a---bc-z(\b|:+)z[\1]z[]a[][::][]bc[]z\b|\w+cSsg|]}|���qSr)rE)ryrSrrrrR�sz*ReTests.test_zerowidth.<locals>.<listcomp>)rr)rArA)rArB)rBrB)r~r~cSsg|]}|���qSr)rE)ryrSrrrrR�s)rrA)rBr~)r#r'r�r2r>r8)rrrr�test_zerowidth�s zReTests.test_zerowidthcCsrxldD]d}x^dD]V}t�d||f�}|�d�}|�|�d�d�|�|�d�d�|�|�d	�d
�qWqWdS)N)z{0,}r6r7z{1,187})z{0,}r6r8z^((x|y)%s)%sZxyyzyrZxyyrArsr�r )r'r)rGr#rJ)rr<r=r�rSrrr�
test_bug_2537�s


zReTests.test_bug_2537c	Csrd}t��}t�|tj�WdQRXd|_d}|�|��|�t��}t�|tj�WdQRX|�|��|�dS)Nz(\.)(?:[ch]|py)(?(1)$|: )a�SUBPATTERN 1 0 0
  LITERAL 46
BRANCH
  IN
    LITERAL 99
    LITERAL 104
OR
  LITERAL 112
  LITERAL 121
GROUPREF_EXISTS 1
  AT AT_END
ELSE
  LITERAL 58
  LITERAL 32

 0. INFO 8 0b1 2 5 (to 9)
      prefix_skip 0
      prefix [0x2e] ('.')
      overlap [0]
 9: MARK 0
11. LITERAL 0x2e ('.')
13. MARK 1
15. BRANCH 10 (to 26)
17.   IN 6 (to 24)
19.     LITERAL 0x63 ('c')
21.     LITERAL 0x68 ('h')
23.     FAILURE
24:   JUMP 9 (to 34)
26: branch 7 (to 33)
27.   LITERAL 0x70 ('p')
29.   LITERAL 0x79 ('y')
31.   JUMP 2 (to 34)
33: FAILURE
34: GROUPREF_EXISTS 0 6 (to 41)
37. AT END
39. JUMP 5 (to 45)
41: LITERAL 0x3a (':')
43. LITERAL 0x20 (' ')
45: SUCCESS
)rr'r)�DEBUGZmaxDiffr#�getvalue)rr��out�dumprrr�test_debug_flags)zReTests.test_debug_flagcCs�t�d�}|�|jdddd���d�|�|jdddd���d�|�|jdddd���d�|�|jdddd�d	g�|�|jdd
d�dd	d
g�|�|j	dddd�����d�dS)Nz(ab)Zabracadabrar^rZ)r3r,r�)r^rYrYrBr�rA)r3r�rsZ	racadabra)
r'r)r#rGrEr�rDr>r�r@)rr�rrr�test_keyword_parameters6s
zReTests.test_keyword_parameterscCs |�t�ddtj���d�dS)Nz[a-c]+r�)rrB)r#r'r�rkrE)rrrr�test_bug_20998HszReTests.test_bug_20998c	Cs�t�tj�}|�tjtj|�xDdD]<}yt�tj|�Wq$tjk
r^|�d|�Yq$Xq$Wt��|��|�	�t��|�	�|��dS)N)zen_US.iso88591z
en_US.utf8ztest needs %s locale)
rvrwrxry�Errorr�r'r��check_en_US_iso88591�check_en_US_utf8)r�	oldlocale�locrrr�test_locale_cachingMs
zReTests.test_locale_cachingcCs�t�tjd�|�t�ddtjtjB��|�t�ddtjtjB��|�t�ddtjtjB��|�t�dd��|�t�dd��|�t�dd��dS)Nzen_US.iso88591s������s(?Li)��s(?Li)�s(?Li)�)rvrwrxr�r'rGrrk)rrrrr�_szReTests.check_en_US_iso88591cCs�t�tjd�|�t�ddtjtjB��|�t�ddtjtjB��|�t�ddtjtjB��|�t�dd��|�t�dd��|�t�dd��dS)Nz
en_US.utf8s��r�r�s(?Li)��s(?Li)�s(?Li)�)	rvrwrxr�r'rGrrkrF)rrrrr�hszReTests.check_en_US_utf8c	Cs�t�tj�}|�tjtj|�xDdD]<}yt�tj|�Wq$tjk
r^|�d|�Yq$Xq$Wt�tjd�t�dtjtj	B�}t�dtjtj	B�}t�dtjtj	B�}t�dtjtj	B�}xB|||fD]4}|�
|�d��|�
|�d��|�
|�d	��q�W|�|�d
��|�|�d��|�|�d	��t�tjd�xD|||fD]6}|�
|�d��|�|�d��|�|�d	���qPW|�
|�d
��|�|�d��|�|�d	��dS)N)zen_US.iso88591z
en_US.utf8ztest needs %s localezen_US.iso88591s��s[a�][a�]s
[az�][az�]s[^�][^�]s��s��s��z
en_US.utf8)
rvrwrxryr�r�r'r)rrkr�rGrF)rr�r�Zp1Zp2Zp3Zp4r�rrr�test_locale_compiledqs6
zReTests.test_locale_compiledc	Cs||�tj��}t�d�WdQRX|j}|�|jt�|�|jd�|�|j	d�|�|j
d�|�|jd�|�|j
t|��|�dt|��|�d|j
�|�tj��}t�d�WdQRX|j}|�|jt�|�|jd�|�|j	d�|�tj��}t�dtj�WdQRX|j}|�|j	d�|�|j
d	�|�|jd
�|�|j
t|��|�dt|��|�dt|��dS)
Nu(€))rBrArwz at position 3s(�))zq
                (
                    abc
                )
                )
                (
                �Mr~�z at position 77z(line 5, column 17))r&r'r(r)r+r�r%rKr#r,�lineno�colno�assertInr!ZassertNotInr�r)rr.r/rrr�
test_error�s6zReTests.test_errorcCs�|�ddd�|�ddd�|�ddd�|�dd	d
�|�ddd
�|�ddd
�|�ddd
�|�ddd�|�dd	d
�|�ddd
�|�dd	d�dS)Nr�z"missing ), unterminated subpatternrz((a|b)z(a|b))zunbalanced parenthesisr~z(?Pzunexpected end of patternrBz(?z)zunknown extension ?zrAz(?iz)zunknown flagz(?izmissing -, : or )z(?#abczmissing ), unterminated commentz(?<z(?<>)zunknown extension ?<>z(?r�)r0)rrrr�test_misc_errors�szReTests.test_misc_errorscCs(|�dttj��|�dttj��dS)Nr�r�)r�rKr'rir	)rrrr�	test_enum�szReTests.test_enumc	Cs�t�dtj�}|�||�|�||k�t��t�dtj�}|�t|�t|��|�||�t��t�dtj�}|�||�t��t�d�}|�||�|�t	��||kWdQRXdS)Nr�ZXYZ)
r'r)rr#r�r��hash�assertNotEqualr&r�)r�pattern1�pattern2�pattern3Zpattern4rrr�test_pattern_compare�s
zReTests.test_pattern_comparec	Cs~t�d�}t��t�d�}|�t|�t|��|�||�t��t�d�}t���t�dt�|�	||�WdQRXdS)Nsabcr�r()
r'r)r�r#r�rbrfrgrhr�)rr�r�r�rrr�test_pattern_compare_bytes�s



z"ReTests.test_pattern_compare_bytescCsptd�}t�d|�}t�d|�}|�|��d�|�|��d�d|dd�<|�|��d�|�|��d�dS)Nsabcdefghs[a-h]+s[e-h]+sefghsxyzrU)r7r'rDr#rJ)rr?rSZm2rrr�test_bug_29444�szReTests.test_bug_29444cCs d}d}|�t�||���d�d}d}|�t�||�ddg�|�dd	�t�||�D�dd
g�d}d}|�t�||�d
dg�|�dd	�t�||�D�ddd�ddd�g�d}|�dd	�t�||�D�ddd�ddd�g�d}|�dd	�t�||�D�ddd�ddd�ddd�g�dS)Nza	xz\b(?=(\t)|(x))x)Nrr�z(?=(.)(.)?))rMr;)r;rscSsg|]}|���qSr)r�)ryrSrrrrR
sz*ReTests.test_bug_34294.<locals>.<listcomp>)r;Nz1(?=<(?P<tag>\w+)/?>(?:(?P<text>.+?)</(?P=tag)>)?)z<test><foo2/></test>)raz<foo2/>)�foo2rscSsg|]}|���qSr)r�)ryrSrrrrRsraz<foo2/>)�tagr�r�z<test>Hello</test><foo/>cSsg|]}|���qSr)r�)ryrSrrrrRsZHellorHz<test>Hello</test><foo/><foo/>cSsg|]}|���qSr)r�)ryrSrrrrRs)r#r'rDr�r>r8)rr?r�rrr�test_bug_34294s2


zReTests.test_bug_34294)N)N)N)�rrrr$r0r4r=r@rHrLrfrgrhrlrmrtrurvr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r'r�r�r3r��digitsrrrr	r
rrrrr"r#r)r*r+r.r1r3r4r5r;r>r?rJrLrMrNrPrTrUrVrYrZr\r_rkrnrqrur~rr�r�r�r�rrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrs�


	
	*0&5!,%
$ !-

	 
			f
8&


6		 $

rc@sleZdZdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�PatternReprTestscCs|�tt�|��|�dS)N)r#r�r'r))rr%r�rrr�check$szPatternReprTests.checkcCs|�tt�||��|�dS)N)r#r�r'r))rr%r�r�rrr�check_flags'szPatternReprTests.check_flagscCs|�dd�dS)Nzrandom patternzre.compile('random pattern'))r�)rrrr�test_without_flags*sz#PatternReprTests.test_without_flagscCs|�dtjd�dS)Nzrandom patternz+re.compile('random pattern', re.IGNORECASE))r�r'r)rrrr�test_single_flag.s
z!PatternReprTests.test_single_flagcCs |�dtjtjBtjBd�dS)Nzrandom patternz@re.compile('random pattern', re.IGNORECASE|re.DOTALL|re.VERBOSE))r�r'rkr	r`)rrrr�test_multiple_flags2sz$PatternReprTests.test_multiple_flagscCs0|�dtjd�|�dtjtjBtjBd�dS)Nzrandom patternzre.compile('random pattern')z5re.compile('random pattern', re.IGNORECASE|re.DOTALL))r�r'r�rkr	)rrrr�test_unicode_flag7s
z"PatternReprTests.test_unicode_flagcCs|�dd�dS)Nz(?i)patternz(re.compile('(?i)pattern', re.IGNORECASE))r�)rrrrrk>sz"PatternReprTests.test_inline_flagscCs&|�ddd�|�ddtjBd�dS)Nzrandom patterni0z&re.compile('random pattern', 0x123000)z4re.compile('random pattern', re.IGNORECASE|0x123000))r�r'rk)rrrr�test_unknown_flagsBsz#PatternReprTests.test_unknown_flagscCs |�dd�|�dtjd�dS)Ns
bytes patternzre.compile(b'bytes pattern')z&re.compile(b'bytes pattern', re.ASCII))r�r�r'ri)rrrr�
test_bytesHs
zPatternReprTests.test_bytescCs|�dtjd�dS)Ns
bytes patternz're.compile(b'bytes pattern', re.LOCALE))r�r'r)rrrr�test_localeNs
zPatternReprTests.test_localecCs(|�dd�|�dd�|�dd�dS)Nzrandom "double quoted" patternz,re.compile('random "double quoted" pattern')zrandom 'single quoted' patternz,re.compile("random 'single quoted' pattern")z!both 'single' and "double" quotesz1re.compile('both \'single\' and "double" quotes'))r�)rrrr�test_quotesRszPatternReprTests.test_quotescCs�ddd}tt�|��}|�t|�d�|�|dd�d�tt�|tj��}|�t|�d�|�|dd�d�|�|dd�d�dS)	NzVery %spatternzlong i�i,�zre.compile('Very long long loni�z, re.IGNORECASE))r�r'r)Z
assertLessr�r#rk)rr%r�rrr�test_long_patternZsz"PatternReprTests.test_long_patternN)rrrr�r�r�r�r�r�rkr�r�r�r�r�rrrrr�#sr�c@seZdZdd�ZdS)�ImplementationTestcCs�tj}|�|d�g�|�|d�dg�|�|d�ddddg�|�|d�ddddg�|�|d	�ddddddg�|�|d
�ddddddddg�dS)NrsrMrr�ZaaaarAr�rBZababbaZabcabdac)�sre_compile�_generate_overlap_tabler#)r�frrr�test_overlap_tablejsz%ImplementationTest.test_overlap_tableN)rrrr�rrrrr�esr�c@seZdZdd�Zdd�ZdS)�
ExternalTestscCs�ddlm}x�|D]�\}}|j||d���t�|�}|�|�|��|�|�|��|�|�|��dd|dd}|�|�|��|�|�|d��|�|�|ddt	|���|�|�|ddt	|���WdQRXqWdS)Nr)�
benchmarks)r%r3r�i')
�
test.re_testsr�r*r'r)r�rDrGr�r�)rr�r%r?r��s2rrr�test_re_benchmarksvs
z ExternalTests.test_re_benchmarkscCsrddlm}m}m}m}�xR|D�]H}d}}}}	}
t|�dkrV|\}}}}	}
n"t|�dkrn|\}}}n
td|��|j||d����||kr�|�t	j
��t	�|�WdQRXw t	�|�}|�|�}||kr�|�
|d�w |����|�|d�|�d�\}
}|�d�|��|j	jd	�}xXtd
d�D]J}y|�|�}|dk�rJd}Wntk
�rfd
}YnX||d|<�q,WxV|j	j��D]F}y|�|�}|dk�r�d}Wntk
�r�d
}YnX|||<�q�W|�t|	|�|
d�WdQRXyt|d�}t|d�}Wntk
�rYntX|�d�� t	�|�}|�|�|��WdQRX|�d��2t	�|t	j�}|�|�}|dk�r�td|�WdQRX|dd�dk�r�|dd�dk�r�|dk	�r�|�d��(t	�|�}|�|�||
|d
��WdQRX|�d��$t	�|t	j�}|�|�|��WdQRX|�d��$t	�|t	j�}|�|�|��WdQRXWdQRXq WdS)Nr)�tests�SUCCEED�FAIL�SYNTAX_ERRORr~rBz%Test tuples should have 3 or 5 fields)r%r3zSucceeded incorrectlyzFailed incorrectly)�foundr�r�rA�d�Noner�zg%dzgrouping errorrzbytes pattern matchzlocale-sensitive matchz#=== Fails on locale-sensitive matchr�z\B���zrange-limited matchzcase-insensitive matchzunicode-sensitive match)r�r�r�r�r�r�rjr*r&r'r(r)rDrFr�rErJr�r�r�r��keysr#�evalr��UnicodeEncodeErrorr��printrr
)rr�r�r�r��tr%r?Zoutcomer1r��obj�resultr,r-ZvardictrzZgirp�bsrrr�
test_re_tests�s�












$

"zExternalTests.test_re_testsN)rrrr�r�rrrrr�tsr��__main__)Ztest.supportrrrrrrvr'r�r3Zunittestrbr�weakrefrrKr	r�rZTestCaserr�r�r�r�mainrrrr�<module>s@Bq