o
    HXh`                    @   s  d dl Z d dlmZ 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
mZmZ d dlZd dlZd dlZd dlZG dd deZdd ZG d	d
 d
ZG dd dZG dd deZG dd dZG dd dee jZG dd deZG dd deZG dd deZG dd deZG dd dee jZ G dd de!Z"G dd  d e Z#e Z$G d!d" d"Z%G d#d$ d$e%e jZ&G d%d& d&e%e jZ'G d'd( d(e%e jZ(G d)d* d*e%e jZ)G d+d, d,e%e jZ*G d-d. d.e%e jZ+G d/d0 d0e%e jZ,d1d2 Z-d3d4 Z.G d5d6 d6e jZ/G d7d8 d8e jZ0G d9d: d:e jZ1G d;d< d<e jZ2G d=d> d>e jZ3G d?d@ d@Z4G dAdB dBe4e jZ5G dCdD dDe4e jZ6G dEdF dFe4e jZ7G dGdH dHe4e jZ8G dIdJ dJe4e jZ9G dKdL dLZ:G dMdN dNe:e jZ;G dOdP dPe:e jZ<G dQdR dRe:e jZ=G dSdT dTe:e jZ>G dUdV dVe:e jZ?G dWdX dXe:e jZ@G dYdZ dZZAG d[d\ d\eAe jZBG d]d^ d^eAe jZCG d_d` d`eAe jZDG dadb dbeAe jZEG dcdd ddeAe jZFG dedf dfe jZGdgdh ZHG didj djZIG dkdl dlZJG dmdn dnZKG dodp dpZLG dqdr drZMG dsdt dtZNG dudv dvZOd dwlmPZP dxdy ZQG dzd{ d{e jZRG d|d} d}ZSG d~d dZTG dd de jZUG dd dZVG dd deVZWG dd deWe jZXG dd deWe jZYG dd deWe jZZG dd deWe jZ[G dd deVZ\G dd de\e jZ]G dd de\e jZ^G dd de\e jZ_G dd de\e jZ`G dd de\e jZaG dd de\e jZbdd Zcdd Zddd Zedd ZfG dd de jZgehdkre i  dS dS )    N)support)warnings_helper)	randrangeshufflec                   @      e Zd ZdS )PassThruN__name__
__module____qualname__ r   r   7/opt/python-3.10.19/usr/lib/python3.10/test/test_set.pyr          r   c                   c       t N)r   r   r   r   r   check_pass_thru      r   c                   @      e Zd Zdd Zdd ZdS )BadCmpc                 C      dS N   r   selfr   r   r   __hash__      zBadCmp.__hash__c                 C      t r   )RuntimeErrorr   otherr   r   r   __eq__   r   zBadCmp.__eq__Nr	   r
   r   r   r    r   r   r   r   r      s    r   c                   @   s   e Zd ZdZdd ZdS )ReprWrapperz*Used to test self-referential repr() callsc                 C   s
   t | jS r   )reprvaluer   r   r   r   __repr__      
zReprWrapper.__repr__N)r	   r
   r   __doc__r%   r   r   r   r   r"      s    r"   c                   @       e Zd ZdZdd Zdd ZdS )HashCountingIntzBint-like object that counts the number of times __hash__ is calledc                 G   s
   d| _ d S Nr   
hash_count)r   argsr   r   r   __init__#   r&   zHashCountingInt.__init__c                 C   s   |  j d7  _ t| S r   )r,   intr   r   r   r   r   r   %   s   
zHashCountingInt.__hash__N)r	   r
   r   r'   r.   r   r   r   r   r   r)   !       r)   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7S )8TestJointOpsc                 C   s2   d | _ }d| _d| _| || _t|| _d S )NZ
simsalabimZ
madagascarZ4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)word	otherwordlettersthetypesdictfromkeysd)r   r2   r   r   r   setUp,   s
   
zTestJointOps.setUpc                 C   s*   |  t| jg d | j tt jdd d S )N   r   a)assertRaises	TypeErrorr5   setr.   r   r   r   r   test_new_or_init3      zTestJointOps.test_new_or_initc                 C   sH   t | j}t | j}| || | t| jt  | t| jg g d S r   )	sortedr6   r9   assertEqualr>   r   r5   r   r?   )r   actualexpectedr   r   r   test_uniquification7   s
   

z TestJointOps.test_uniquificationc                 C   s   |  t| jt| j d S r   )rD   lenr6   r9   r   r   r   r   test_len>   s   zTestJointOps.test_lenc                 C   sb   | j D ]}| || jv || jv  q| t| jjg g | t| j g}| 	| | j | d S r   )
r4   rD   r6   r9   r>   r?   __contains__r5   	frozensetassertIn)r   cr6   r   r   r   test_containsA   s
   
zTestJointOps.test_containsc                 C   s  | j | j}| jD ]}| ||v || jv p|| jv  q
| | j | | j | t|| j	 | 
t| j jt  | 
t| j jg g tttjtttfD ]U}| | d|dtd | | d|dtd | | d|dtd | | d|dtd	 | | d|d|d
td qN|  }| |tdg|tdg| ddg d S )NabcbacdcabcdefgfeabcefgccbabcefabcefZfgr   r;   )r6   unionr3   r4   rD   r9   r5   r2   typebasetyper>   r   r   r?   r@   rK   r7   r8   strlisttuple)r   urM   Cxr   r   r   
test_unionH   s   
"    (0zTestJointOps.test_unionc                 C   sr   | j | j}| | j t| jB | | | j t| jB | z| j | jB  W n
 ty1   Y d S w | d d S )Nz(s|t did not screen-out general iterables)r6   rX   r3   rD   r@   rK   r?   failr   ir   r   r   test_or[      zTestJointOps.test_orc                 C   s  | j | j}| jD ]}| ||v || jv o|| jv  q
| | j | | j | t|| j	 | 
t| j jt  tttjtttfD ]U}| | d|dtd | | d|dtd | | d|dtd | | d|dtd | | d|d	|d
td qD| d}| }| jt kr| t|t| d S | t|t| d S )NrO   rP   ccrR    rT   bcrV   ZcbcfZbagb)r6   intersectionr3   r4   rD   r9   r5   r2   rY   rZ   r>   r   r   r@   rK   r7   r8   r[   r\   r]   idassertNotEqual)r   rd   rM   r_   r6   zr   r   r   test_intersectionf   s"   
"    (
zTestJointOps.test_intersectionc           	      C   s   dd }dD ]7}|  |}dD ]-}tttjtttfD ]!}||}||}|||}| 	|| | 
|du p9|du  qqqd S )Nc                 S   s   t | | S )z&Pure python equivalent of isdisjoint())r@   rk   )s1s2r   r   r   f{   s   z'TestJointOps.test_isdisjoint.<locals>.f)
rh   r=   abrU   ZababacrP   rg   rR   rT   rV   TF)r5   r@   rK   r7   r8   r[   r\   r]   
isdisjointrD   
assertTrue)	r   rr   Zlargrp   Zrargr_   rq   rE   rF   r   r   r   test_isdisjointz   s   


zTestJointOps.test_isdisjointc                 C   sr   | j | j}| | j t| j@ | | | j t| j@ | z| j | j@  W n
 ty1   Y d S w | d d S )Nz(s&t did not screen-out general iterables)r6   rk   r3   rD   r@   rK   r?   rb   rc   r   r   r   test_and   rf   zTestJointOps.test_andc                 C   sf  | j | j}| jD ]}| ||v || jv o|| jv q
| | j | | j | t|| j	 | 
t| j jt  | 
t| j jg g tttjtttfD ]b}| | d|dtd | | d|dtd | | d|dtd | | d|dtd | | d td | | d|d|d	td
 qNd S )NrO   rP   rs   rR   rU   rT   r=   rV   rj   rM   )r6   
differencer3   r4   rD   r9   r5   r2   rY   rZ   r>   r   r   r?   r@   rK   r7   r8   r[   r\   r]   r   rd   rM   r_   r   r   r   test_difference   s   
"    (zTestJointOps.test_differencec                 C   sr   | j | j}| | j t| j | | | j t| j | z| j | j  W n
 ty1   Y d S w | d d S )Nz(s-t did not screen-out general iterables)r6   rx   r3   rD   r@   rK   r?   rb   rc   r   r   r   test_sub   rf   zTestJointOps.test_subc                 C   s&  | j | j}| jD ]}| ||v || jv || jv A  q
| | j | | j | t|| j	 | 
t| j jt  | 
t| j jg g tttjtttfD ]B}| | d|dtd | | d|dtd | | d|dtd | | d|dtd	 qNd S )
NrO   rP   abdrR   rS   rT   r=   rV   rW   )r6   symmetric_differencer3   r4   rD   r9   r5   r2   rY   rZ   r>   r   r   r?   r@   rK   r7   r8   r[   r\   r]   ry   r   r   r   test_symmetric_difference   s   
"   "z&TestJointOps.test_symmetric_differencec                 C   sr   | j | j}| | j t| jA | | | j t| jA | z| j | jA  W n
 ty1   Y d S w | d d S )Nz(s^t did not screen-out general iterables)r6   r}   r3   rD   r@   rK   r?   rb   rc   r   r   r   test_xor   rf   zTestJointOps.test_xorc                 C   s|   |  | jt| j |  | jt| j |  | j| jkd | | jt| j | | jt| j |  | j| jkd d S NFT)rD   r6   r@   r2   rK   rm   r3   r   r   r   r   test_equality   s   zTestJointOps.test_equalityc                 C   s,   t tg d}| |}| t|d d S )N)ZabcdefZbcdZbdcbZfedZfedccba   )maprK   r5   rD   rH   )r   tr6   r   r   r   test_setOfFrozensets   s   
z!TestJointOps.test_setOfFrozensetsc                 C   s   t | jg d\}}}| ||k  | ||k | ||k | ||k | ||k | ||k  | ||k | ||k | ||k | tdd | tdd | tdd | tdd d S )N)rs   Zabcdedefr=   rU   Zcbs)r   r5   ru   ZassertFalser@   issubset
issuperset)r   pqrr   r   r   test_sub_and_super   s   zTestJointOps.test_sub_and_superc                 C   s   t tjd D ]=}t| j|}t|}| | j|d| j|f  t| jtt	fvrDd| j_
t| j|}t|}| | jj
|j
 qd S )Nr   %s != %s
   )rangepickleHIGHEST_PROTOCOLdumpsr6   loadsrD   rY   r@   rK   r`   )r   rd   r   dupr   r   r   test_pickling   s   

zTestJointOps.test_picklingc              	   C   s   t tjd D ]X}t| j}| | j}t||}t|}| |t	j
j | | || t|}zt|}W n	 tyD   Y qw t||}t|}| | ||| |f  qd S r   )r   r   r   iterr6   r5   r   r   ZassertIsInstancecollectionsrU   IteratorrD   nextStopIteration)r   protoZitorgdatar9   itZdropr   r   r   test_iterator_pickling   s"   



 z#TestJointOps.test_iterator_picklingc                    s~   G  fddd  d}|  |g}t|}| t|t| |D ]}|}q$| t|t| | |jd |j d S )Nc                       s*   e Zd Zdd Zdd Zd fdd	ZdS )	z*TestJointOps.test_deepcopy.<locals>.Tracerc                 S   
   || _ d S r   r$   )r   r$   r   r   r   r.     r&   z3TestJointOps.test_deepcopy.<locals>.Tracer.__init__c                 S   s   | j S r   r   r   r   r   r   r     s   z3TestJointOps.test_deepcopy.<locals>.Tracer.__hash__Nc                    s    | j d S r   r   )r   memoTracerr   r   __deepcopy__
     z7TestJointOps.test_deepcopy.<locals>.Tracer.__deepcopy__r   )r	   r
   r   r.   r   r   r   r   r   r   r     s    r   r   r   )r5   copydeepcopyrm   rl   rD   r$   )r   r   r6   r   elemZnewtr   r   r   test_deepcopy  s   
zTestJointOps.test_deepcopyc                    sN   G dd d t  fddtdD }|D ]}||_||_t |g|_ qd S )Nc                   @   r   )zTestJointOps.test_gc.<locals>.ANr   r   r   r   r   A  r   r   c                 3       | ]}  V  qd S r   r   .0rd   r   r   r   	<genexpr>      z'TestJointOps.test_gc.<locals>.<genexpr>  )r@   r   cyclesub)r   r6   r   r   r   r   test_gc  s   zTestJointOps.test_gcc                 C   sV   G dd d| j }| }t }|| | || || || || d S )Nc                   @      e Zd Zdd ZdS )z6TestJointOps.test_subclass_with_custom_hash.<locals>.Hc                 S   s   t t| d@ S )Ni)r/   rl   r   r   r   r   r   "     z?TestJointOps.test_subclass_with_custom_hash.<locals>.H.__hash__N)r	   r
   r   r   r   r   r   r   H!      r   )r5   r@   addrL   removediscard)r   r   r6   rr   r   r   r   test_subclass_with_custom_hash  s   


z+TestJointOps.test_subclass_with_custom_hashc                 C   s   |  t g}| t| j t t g | t|jt  t|dr>| t|jt  | t|jt  | t|jt  d S d S )Nr   )	r5   r   r>   r   rJ   hasattrr   r   r   r   r6   r   r   r   test_badcmp,  s   
zTestJointOps.test_badcmpc                 C   sd   t  }| |g}||_| jtkr| t|d d S t|dd }| t|d||f  d S )Nz
{set(...)}(r   z%s({%s(...)}))r"   r5   r$   r@   rD   r#   	partition)r   wr6   namer   r   r   test_cyclical_repr7  s   
zTestJointOps.test_cyclical_reprc                 C   s:  d}t ttt|}| tdd |D | | |}| tdd |D | || | tdd |D | t	|drG|
| | tdd |D | t t|}| tdd |D | t t|}| td	d |D | t t|d
}| tdd |D | | |t |d
 d S )Nr   c                 s       | ]}|j V  qd S r   r+   r   r   r   r   r   r   D  r   z<TestJointOps.test_do_not_rehash_dict_keys.<locals>.<genexpr>c                 s   r   r   r+   r   r   r   r   r   F  r   c                 s   r   r   r+   r   r   r   r   r   H  r   symmetric_difference_updatec                 s   r   r   r+   r   r   r   r   r   K  r   c                 s   r   r   r+   r   r   r   r   r   M  r   c                 s   r   r   r+   r   r   r   r   r   O  r   {   c                 s   r   r   r+   r   r   r   r   r   Q  r   )r7   r8   r   r)   r   rD   sumr5   rx   r   r   r@   rK   )r   nr9   r6   Zd2Zd3r   r   r   test_do_not_rehash_dict_keysA  s"   



z)TestJointOps.test_do_not_rehash_dict_keysc                 C   sX   G dd dt }| }t|}t|dg}t||_~~t  | | d u d d S )Nc                   @   r   )z/TestJointOps.test_container_iterator.<locals>.CNr   r   r   r   r   r_   V  r   r_   r   zCycle was not collected)	objectweakrefrefr@   r   r`   gcZcollectru   )r   r_   objr   	containerr   r   r   test_container_iteratorT  s   

z$TestJointOps.test_container_iteratorc                 C   s   t | t| j d S r   )r   Zcheck_free_after_iteratingr   r5   r   r   r   r   test_free_after_iterating`     z&TestJointOps.test_free_after_iteratingN)r	   r
   r   r:   rA   rG   rI   rN   ra   re   ro   rv   rw   rz   r{   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   )   s8    

r1   c                   @   s   e Zd ZeZeZdd Zdd Zdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Ze e!ed3d4d5d6 Z"d7S )8TestSetc                 C   sj   |   }|| j | |t| j || j | |t| j | t|j|d | t|jd d S )Nr;   r   )r5   r.   r2   rD   r@   r3   r>   r?   r   r   r   r   	test_initg  s   zTestSet.test_initc                 C   0   |  td}|  |}| t|t| d S Nr   r5   r   rm   rl   r   r6   r   r   r   r   test_constructor_identityp     
z!TestSet.test_constructor_identityc                 C   s$   t g d}h d}| || d S )Nr   r;   r      r   r;   r   r@   rD   r   r   r   r   test_set_literalu  s   zTestSet.test_set_literalc                 C   s4   h d}|  t|d | }|  t|t d S )N>   r   r   )rD   rH   poprY   r/   )r   r6   Zstored_valuer   r   r    test_set_literal_insertion_orderz  s   z(TestSet.test_set_literal_insertion_orderc                    s:   g   fdd}|d|d|dh}|   g d d S )Nc                    s     |  d S r   )append)r   eventsr   r   record  r   z9TestSet.test_set_literal_evaluation_order.<locals>.recordr   r;   r   r   )rD   )r   r   r6   r   r   r   !test_set_literal_evaluation_order  s   z)TestSet.test_set_literal_evaluation_orderc                 C   s   |  tt| j d S r   )r>   r?   hashr6   r   r   r   r   	test_hash  r   zTestSet.test_hashc                 C   s0   | j   | | j t  | t| j d d S r*   )r6   clearrD   r@   rH   r   r   r   r   
test_clear  s   
zTestSet.test_clearc                 C   sD   | j  }| | j | | t| j t| | t|| j d S r   )r6   r   rD   rm   rl   rY   rZ   r   r   r   r   r   	test_copy  s   
zTestSet.test_copyc                 C   sT   | j d | d| j  | j  }| j d | | j | | t| j jg  d S )NQ)r6   r   rL   r   rD   r>   r?   r   r   r   r   test_add  s   
zTestSet.test_addc                 C   s   | j d | d| j  | t| j jd | t| j jg  | t| jg}| 	| | j| || | j | | | j| | t| j j| | j d S Nr=   r   )
r6   r   assertNotInr>   KeyErrorr?   r5   rK   r2   rL   r   r   r   r   test_remove  s   zTestSet.test_removec                 C   sb   dD ],}z| j | W n ty) } z|jd }| || W Y d }~qd }~ww |   qd S )N)r   r   r   )r6   r   r   r-   rD   rb   )r   v1ev2r   r   r   test_remove_keyerror_unpacking  s   

z&TestSet.test_remove_keyerror_unpackingc                 C   sv   |  ddg}z| j| W n% ty4 } z| |jd |u d||jd  W Y d }~d S d }~ww |   d S )Nr      r   zKeyError should be {0}, not {1})r5   r6   r   r   ru   r-   formatrb   )r   keyr   r   r   r   test_remove_keyerror_set  s   z TestSet.test_remove_keyerror_setc                 C   s   | j d | d| j  | j d | t| j jg  | t| jg}| | | j| || | j | | | j| || | j d S r   )	r6   r   r   r>   r?   r5   rK   r2   rL   r   r   r   r   test_discard  s   zTestSet.test_discardc                 C   s@   t t| jD ]}| j }| || j q| t| jj d S r   )r   rH   r6   r   r   r>   r   )r   rd   r   r   r   r   test_pop  s   
zTestSet.test_popc              	   C   s(  | j | j}| |d  | j| j D ]	}| || j  q| t| j jt  | t	| j jg g dD ](\}}t
ttjtttfD ]}| d}| |||d  | |t
| q@q3dD ]3}d}t
ttjtttfD ]%}| d}| |||||d  | |t
|t
|B t
|B  qkq^d S )N))rP   rQ   rR   rS   )rT   rU   rV   rW   rO   )rP   rR   rT   rV   ZabcdaZahi)r6   updater3   rD   r2   rL   r>   r   r   r?   r@   rK   r7   r8   r[   r\   r]   r5   r   retvalrM   r   r   r_   r6   r   r   r   test_update  s(   

"zTestSet.test_updatec                 C   s8   |  j t| jO  _ | j| j D ]	}| || j  qd S r   )r6   r@   r3   r2   rL   r   rM   r   r   r   test_ior  s   zTestSet.test_iorc           	   	   C   s.  | j | j}| |d  | j| j D ]}|| jv r'|| jv r'| || j  q| || j  q| t| j jt	  | t
| j jg g dD ]O\}}tttjtttfD ]A}| d}| |||d  | |t| d}| |}d}| |||||d  | |tdt|@ t|@  qRqEd S )N))rP   rM   )rR   rh   )rT   ri   )rV   rh   rO   Zcbc)r6   intersection_updater3   rD   r2   rL   r   r>   r   r   r?   r@   rK   r7   r8   r[   r\   r]   r5   )	r   r  rM   r   r   r_   r6   ssr   r   r   r   test_intersection_update  s(   

"z TestSet.test_intersection_updatec                 C   s\   |  j t| jM  _ | j| j D ]}|| jv r$|| jv r$| || j  q| || j  qd S r   r6   r@   r3   r2   rL   r   r  r   r   r   	test_iand     zTestSet.test_iandc                 C   sr  | j | j}| |d  | j| j D ]}|| jv r'|| jvr'| || j  q| || j  q| t| j jt	  | t
| j jg g | t
| j jg g dD ]g\}}tttjtttfD ]Y}| d}| |||d  | |t| | d}|  | || d | d}||d | || d | d}||d|d | || d q\qOd S )N))rP   rs   )rR   rU   rT   r=   )rV   rU   rO   Z
abcdefghihZabaZcdefghihrP   Zefghih)r6   difference_updater3   rD   r2   rL   r   r>   r   r   r?   r   r@   rK   r7   r8   r[   r\   r]   r5   r  r   r   r   test_difference_update  s2   



zTestSet.test_difference_updatec                 C   s\   |  j t| j8  _ | j| j D ]}|| jv r$|| jvr$| || j  q| || j  qd S r   r
  r  r   r   r   	test_isub#  r  zTestSet.test_isubc                 C   s   | j | j}| |d  | j| j D ]}|| jv || jv A r'| || j  q| || j  q| t| j jt	  | t
| j jg g dD ](\}}tttjtttfD ]}| d}| |||d  | |t| qRqEd S )N))rP   r|   r   r  r   rO   )r6   r   r3   rD   r2   rL   r   r>   r   r   r?   r@   rK   r7   r8   r[   r\   r]   r5   r  r   r   r    test_symmetric_difference_update+  s   
z(TestSet.test_symmetric_difference_updatec                 C   s\   |  j t| jN  _ | j| j D ]}|| jv || jv A r$| || j  q| || j  qd S r   r
  r  r   r   r   	test_ixor;  r  zTestSet.test_ixorc                 C   st   | j  }||O }| || j  ||M }| || j  ||8 }| ||   | j  }||N }| ||   d S r   )r6   r   rD   r5   )r   r   r   r   r   test_inplace_on_selfC  s   

zTestSet.test_inplace_on_selfc                 C   sF   |  d}t|}| t|t| d }t  | tt| d S )NZgallahad)	r5   r   proxyrD   r[   r   
gc_collectr>   ReferenceError)r   r6   r   r   r   r   test_weakrefO  s   

zTestSet.test_weakrefc                 C   s   G dd d}h d}| }||k  |  |j | }||k |  |j | }||k |  |j | }||k |  |j d S )Nc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
z5TestSet.test_rich_compare.<locals>.TestRichSetComparec                 S   
   d| _ dS NTF)	gt_calledr   Zsome_setr   r   r   __gt__Y     z<TestSet.test_rich_compare.<locals>.TestRichSetCompare.__gt__c                 S   r  r  )	lt_calledr  r   r   r   __lt__\  r  z<TestSet.test_rich_compare.<locals>.TestRichSetCompare.__lt__c                 S   r  r  )	ge_calledr  r   r   r   __ge___  r  z<TestSet.test_rich_compare.<locals>.TestRichSetCompare.__ge__c                 S   r  r  )	le_calledr  r   r   r   __le__b  r  z<TestSet.test_rich_compare.<locals>.TestRichSetCompare.__le__N)r	   r
   r   r  r  r!  r#  r   r   r   r   TestRichSetCompareX  s
    r$  r   )ru   r  r  r   r"  )r   r$  ZmysetZmyobjr   r   r   test_rich_compareW  s   zTestSet.test_rich_compare
test_c_apiz*C API test only available in a debug buildc                 C   s   |  t  d d S NT)rD   r@   r&  r   r   r   r   r&  {  s   zTestSet.test_c_apiN)#r	   r
   r   r@   r5   rZ   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%  unittestZ
skipUnlessr   r&  r   r   r   r   r   c  s@    	$r   c                   @   r   )SetSubclassNr   r   r   r   r   r)    r   r)  c                   @      e Zd ZeZeZdS )TestSetSubclassN)r	   r
   r   r)  r5   r@   rZ   r   r   r   r   r+        r+  c                   @   s   e Zd Zg dfddZdS )SetSubclassWithKeywordArgsNc                 C   s   t | | d S r   )r@   r.   )r   iterablenewargr   r   r   r.     r   z#SetSubclassWithKeywordArgs.__init__)r	   r
   r   r.   r   r   r   r   r-    s    r-  c                   @   r   )TestSetSubclassWithKeywordArgsc                 C   s   t dd dS )z=SF bug #1486663 -- this used to erroneously raise a TypeErrorr   )r/  N)r-  r   r   r   r   test_keywords_in_subclass  s   z8TestSetSubclassWithKeywordArgs.test_keywords_in_subclassN)r	   r
   r   r1  r   r   r   r   r0    s    r0  c                   @   sL   e Zd ZeZeZdd Zdd Zdd Zdd Z	d	d
 Z
dd Zdd ZdS )TestFrozenSetc                 C   s.   |  | j}|| j | |t| j d S r   )r5   r2   r.   r3   rD   r@   r   r   r   r   r     s   zTestFrozenSet.test_initc                 C   r   r   )r5   r   rD   rl   r   r   r   r   r     r   z'TestFrozenSet.test_constructor_identityc                    s~   |  t| dt| d d  fddt D }t }tdD ]}t| |t| | q$|  t|d d S )NZabcdebZebecdad   c                    s   g | ]}t  qS r   r   r   r   r   r   
<listcomp>      z+TestFrozenSet.test_hash.<locals>.<listcomp>   r   )rD   r   r5   r   r@   r   r   rH   )r   seqresultsrd   r   r5  r   r     s   zTestFrozenSet.test_hashc                 C   $   | j  }| t| j t| d S r   )r6   r   rD   rl   r   r   r   r   r        
zTestFrozenSet.test_copyc                 C   sr   t tdt d dg }| |}| t|}| || | t|t| i }d||< | || d d S )Nr   ZabcdefgZapple*   )r\   r   r5   reversedrD   rm   rl   )r   r9  Zkey1Zkey2r9   r   r   r   test_frozen_as_dictkey  s   
z$TestFrozenSet.test_frozen_as_dictkeyc                 C   s"   |  d}| t|t| d S )NZabcdcda)r5   rD   r   r   rr   r   r   r   test_hash_caching  s   
zTestFrozenSet.test_hash_cachingc           
   	      s   d}t  }|j}dd t|D }td| D ] |tt fdd|D  q| t|d|  dd }dd	 }td
D ]+}d| }|d t|fD ]}tfddtt|||D }	| d|	 | qMq?d S )N   c                 S   s   g | ]
}|d  d |> fqS r   r   r   r   r   r   r6        z9TestFrozenSet.test_hash_effectiveness.<locals>.<listcomp>r;   c                    s   g | ]
\}}| @ r|qS r   r   )r   r   mrd   r   r   r6    rC  c                 S   s8   t  g}t| d D ]}t |}|| q
|d |  S r   )rK   r   r   )r   numsrd   numr   r   r   zf_range  s
   z7TestFrozenSet.test_hash_effectiveness.<locals>.zf_rangec                 s   s4    t t| d D ]}ttt| |E d H  q	d S r   )r   rH   r   rK   	itertoolscombinations)r6   rd   r   r   r   powerset  s   z7TestFrozenSet.test_hash_effectiveness.<locals>.powerset   r   c                    s   h | ]}| @ qS r   r   )r   h)maskr   r   	<setcomp>  r7  z8TestFrozenSet.test_hash_effectiveness.<locals>.<setcomp>r   )	r@   r   r   r   rK   rD   rH   r   ZassertGreater)
r   r   Z
hashvaluesZaddhashvalueZ	elemmasksrH  rK  r   rF  r^   r   )rd   rN  r   test_hash_effectiveness  s"    $z%TestFrozenSet.test_hash_effectivenessN)r	   r
   r   rK   r5   rZ   r   r   r   r   r?  rA  rP  r   r   r   r   r2    s    
r2  c                   @   r   )FrozenSetSubclassNr   r   r   r   r   rQ    r   rQ  c                   @   s4   e Zd ZeZeZdd Zdd Zdd Z	dd Z
d	S )
TestFrozenSetSubclassc                 C   r   r   r   r   r   r   r   r     r   z/TestFrozenSetSubclass.test_constructor_identityc                 C   r;  r   )r6   r   rm   rl   r   r   r   r   r     r<  zTestFrozenSetSubclass.test_copyc                 C   s"   |   }|  |}| || d S r   )r5   rD   r   r   r   r   test_nested_empty_constructor  s   
z3TestFrozenSetSubclass.test_nested_empty_constructorc                 C   s   | j }t }| }| |g |d|d| |g |d|d|td|| |t ||||||g}| tttt|t| d S )Nr   rh   r   )r5   rK   r   rD   rH   r@   r   rl   )r   Z	Frozensetrr   FZefsr   r   r   test_singleton_empty_frozenset  s   "z4TestFrozenSetSubclass.test_singleton_empty_frozensetN)r	   r
   r   rQ  r5   rK   rZ   r   r   rS  rU  r   r   r   r   rR    s    rR  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/S )0TestBasicOpsc                 C   s&   | j d ur| t | j| j  d S d S r   )r#   rD   r@   r   r   r   r   	test_repr  s   
zTestBasicOps.test_reprc                 C   sl   t | j}| |d | |d |dd d}|  dd | jD }|  | || d S )N{}r   z, c                 S   s   g | ]}t |qS r   )r#   )r   r$   r   r   r   r6    r7  z:TestBasicOps.check_repr_against_values.<locals>.<listcomp>)	r#   r@   ru   
startswithendswithsplitsortvaluesrD   )r   textresultZsorted_repr_valuesr   r   r   check_repr_against_values  s   
z&TestBasicOps.check_repr_against_valuesc                 C   s   |  t| j| j d S r   )rD   rH   r@   lengthr   r   r   r   test_length     zTestBasicOps.test_lengthc                 C   s   |  | j| j d S r   rD   r@   r   r   r   r   test_self_equality  r   zTestBasicOps.test_self_equalityc                 C   s   |  | j| j d S r   )rD   r@   r   r   r   r   r   test_equivalent_equality  r   z%TestBasicOps.test_equivalent_equalityc                 C   s   |  | j | j d S r   )rD   r@   r   r   r   r   r   r   r     re  zTestBasicOps.test_copyc                 C   s   | j | j B }| || j d S r   r@   rD   r   r   ra  r   r   r   test_self_union     zTestBasicOps.test_self_unionc                 C   s   | j tB }| || j d S r   r@   	empty_setrD   r   rj  r   r   r   test_empty_union!     
zTestBasicOps.test_empty_unionc                 C   s   t | jB }| || j d S r   )rn  r@   rD   r   rj  r   r   r   test_union_empty%  rp  zTestBasicOps.test_union_emptyc                 C   s   | j | j @ }| || j d S r   ri  rj  r   r   r   test_self_intersection)  rl  z#TestBasicOps.test_self_intersectionc                 C   s   | j t@ }| |t d S r   r@   rn  rD   rj  r   r   r   test_empty_intersection-     
z$TestBasicOps.test_empty_intersectionc                 C   s   t | j@ }| |t  d S r   rn  r@   rD   rj  r   r   r   test_intersection_empty1  ru  z$TestBasicOps.test_intersection_emptyc                 C   s"   | j | j }| || j   d S r   r@   rt   rD   rj  r   r   r   test_self_isdisjoint5     z!TestBasicOps.test_self_isdisjointc                 C   s   | j t}| |d d S r'  )r@   rt   rn  rD   rj  r   r   r   test_empty_isdisjoint9     z"TestBasicOps.test_empty_isdisjointc                 C   s   t | j}| |d d S r'  )rn  rt   r@   rD   rj  r   r   r   test_isdisjoint_empty=  r|  z"TestBasicOps.test_isdisjoint_emptyc                 C   s   | j | j A }| |t d S r   r@   rD   rn  rj  r   r   r   test_self_symmetric_differenceA  r|  z+TestBasicOps.test_self_symmetric_differencec                 C   s   | j tA }| || j  d S r   rs  rj  r   r   r   test_empty_symmetric_differenceE  rp  z,TestBasicOps.test_empty_symmetric_differencec                 C   s   | j | j  }| |t d S r   r~  rj  r   r   r   test_self_differenceI  r|  z!TestBasicOps.test_self_differencec                 C   s   | j t }| || j d S r   rm  rj  r   r   r   test_empty_differenceM  rp  z"TestBasicOps.test_empty_differencec                 C   s   t | j }| |t  d S r   rv  rj  r   r   r   test_empty_difference_revQ  ru  z&TestBasicOps.test_empty_difference_revc                 C   s>   | j D ]	}| || j qt| j }| | t| j  d S r   )r@   rL   r_  r   rD   __length_hint__rH   )r   vZsetiterr   r   r   test_iterationU  s   

zTestBasicOps.test_iterationc                 C   sJ   t tjd D ]}t| j|}t|}| | j|d| j|f  qd S )Nr   r   )r   r   r   r   r@   r   rD   )r   r   r   r   r   r   r   r   [  s   

zTestBasicOps.test_picklingc                 C   sr   |  t t d W d    n1 sw   Y  |  t t d W d    d S 1 s2w   Y  d S )Nr   )r>   r?   r@   rx   r  r   r   r   r   test_issue_37219b  s   "zTestBasicOps.test_issue_37219N)r	   r
   r   rW  rb  rd  rg  rh  r   rk  ro  rq  rr  rt  rw  ry  r{  r}  r  r  r  r  r  r  r   r  r   r   r   r   rV     s0    rV  c                   @   r   )TestBasicOpsEmptyc                 C   s4   d| _ g | _t| j| _t| j| _d| _d| _d S )Nz	empty setr   zset()caser_  r@   r   rc  r#   r   r   r   r   r:   k  s   
zTestBasicOpsEmpty.setUpNr	   r
   r   r:   r   r   r   r   r  j  r   r  c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestBasicOpsSingletonc                 C   6   d| _ dg| _t| j| _t| j| _d| _d| _d S )Nzunit set (number)r   r   z{3}r  r   r   r   r   r:   v     
zTestBasicOpsSingleton.setUpc                 C      |  d| j d S r   rL   r@   r   r   r   r   test_in~     zTestBasicOpsSingleton.test_inc                 C   r  Nr;   r   r@   r   r   r   r   test_not_in  r  z!TestBasicOpsSingleton.test_not_inNr	   r
   r   r:   r  r  r   r   r   r   r  u      r  c                   @   r  )TestBasicOpsTuplec                 C   r  )Nzunit set (tuple)r   zeror   z{(0, 'zero')}r  r   r   r   r   r:     r  zTestBasicOpsTuple.setUpc                 C   r  )Nr  r  r   r   r   r   r    r  zTestBasicOpsTuple.test_inc                 C   r  )N	   r  r   r   r   r   r    r  zTestBasicOpsTuple.test_not_inNr  r   r   r   r   r    r  r  c                   @   r   )TestBasicOpsTriplec                 C   s<   d| _ ddtjg| _t| j| _t| j| _d| _d | _d S )Nz
triple setr   r  r   )r  operatorr   r_  r@   r   rc  r#   r   r   r   r   r:     s   
zTestBasicOpsTriple.setUpNr  r   r   r   r   r    r   r  c                   @   r   )TestBasicOpsStringc                 C   2   d| _ g d| _t| j| _t| j| _d| _d S )Nz
string setr=   rj   rM   r   r  r_  r@   r   rc  r   r   r   r   r:     
   

zTestBasicOpsString.setUpc                 C      |    d S r   rb  r   r   r   r   rW       zTestBasicOpsString.test_reprNr	   r
   r   r:   rW  r   r   r   r   r        r  c                   @   r   )TestBasicOpsBytesc                 C   r  )Nz	bytes set)   a   b   cr   r  r   r   r   r   r:     r  zTestBasicOpsBytes.setUpc                 C   r  r   r  r   r   r   r   rW    r  zTestBasicOpsBytes.test_reprNr  r   r   r   r   r    r  r  c                   @   r  )TestBasicOpsMixedStringBytesc                 C   sR   t  | _| j  tdt d| _g d| _t	| j| _	t	| j| _
d| _d S )Nignorezstring and bytes set)r=   rj   r  r  r   )r   Zcheck_warnings_warning_filters	__enter__warningssimplefilterBytesWarningr  r_  r@   r   rc  r   r   r   r   r:     s   



z"TestBasicOpsMixedStringBytes.setUpc                 C   s   | j d d d  d S r   )r  __exit__r   r   r   r   tearDown  r   z%TestBasicOpsMixedStringBytes.tearDownc                 C   r  r   r  r   r   r   r   rW    r  z&TestBasicOpsMixedStringBytes.test_reprN)r	   r
   r   r:   r  rW  r   r   r   r   r    s    
r  c                   c   r   r   )r?   r   r   r   r   baditer  r   r  c                   c   s    dV  d S r'  r   r   r   r   r   gooditer  s   
r  c                   @   (   e Zd ZdZdd Zdd Zdd ZdS )	TestExceptionPropagationz?SF 628246:  Set constructor should not trap iterator TypeErrorsc                 C   s   |  ttt  d S r   )r>   r?   r@   r  r   r   r   r   test_instanceWithException  r   z3TestExceptionPropagation.test_instanceWithExceptionc                 C   sF   t g d t d t dddd t td t d t t  d S )Nr   r   r;   r   )ZoneZtwoZthreerU   )r@   r   r  r   r   r   r   test_instancesWithoutException  s   z7TestExceptionPropagation.test_instancesWithoutExceptionc                 C   sJ   t g d}z|D ]}|dg q	W n
 ty   Y d S w | d d S )Nr   r   z0no exception when changing size during iteration)r@   r  r   rb   )r   r6   rd   r   r   r   test_changingSizeWhileIterating  s   z8TestExceptionPropagation.test_changingSizeWhileIteratingN)r	   r
   r   r'   r  r  r  r   r   r   r   r    s
    	r  c                   @   r   )TestSetOfSetsc                 C   s\   t dg}t|g}| }| t|t  || || | |t  || d S r   )rK   r@   r   rD   rY   r   r   r   )r   innerZouterelementr   r   r   test_constructor  s   



zTestSetOfSets.test_constructorN)r	   r
   r   r  r   r   r   r   r    r   r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%S )&TestBinaryOpsc                 C      t d| _ d S Nr;   r      r@   r   r   r   r   r:     r   zTestBinaryOps.setUpc                 C   s   |  | jtdddd d S )Nr   r      r  rf  r   r   r   r   test_eq  s   zTestBinaryOps.test_eqc                 C   s$   | j t dgB }| |t d d S Nr;   r  r   rj  r   r   r   test_union_subset  s   zTestBinaryOps.test_union_subsetc                 C   s*   | j t g dB }| |t g d d S Nr;   r   r     r   rj  r   r   r   test_union_superset	  rB   z!TestBinaryOps.test_union_supersetc                 C   s*   | j t g dB }| |t g d d S Nr   r   r  )r;   r   r   r  r  r   rj  r   r   r   test_union_overlap  rB   z TestBinaryOps.test_union_overlapc                 C   s(   | j t dgB }| |t g d d S Nr  r  r   rj  r   r   r   test_union_non_overlap     z$TestBinaryOps.test_union_non_overlapc                 C   s"   | j t d@ }| |t d d S Nr;   r   r   rj  r   r   r   test_intersection_subset  rz  z&TestBinaryOps.test_intersection_subsetc                 C   s*   | j t g d@ }| |t g d d S Nr  r  r   rj  r   r   r   test_intersection_superset  rB   z(TestBinaryOps.test_intersection_supersetc                 C   s(   | j t g d@ }| |t dg d S Nr  r   r   rj  r   r   r   test_intersection_overlap     z'TestBinaryOps.test_intersection_overlapc                 C   s    | j t dg@ }| |t d S Nr  r~  rj  r   r   r   test_intersection_non_overlap!     z+TestBinaryOps.test_intersection_non_overlapc                 C   s    | j t d}| |d d S )Nr  Frx  rj  r   r   r   test_isdisjoint_subset%  r  z$TestBinaryOps.test_isdisjoint_subsetc                 C   $   | j t g d}| |d d S )Nr  Frx  rj  r   r   r   test_isdisjoint_superset)     z&TestBinaryOps.test_isdisjoint_supersetc                 C   r  )Nr  Frx  rj  r   r   r   test_isdisjoint_overlap-  r  z%TestBinaryOps.test_isdisjoint_overlapc                 C   s"   | j t dg}| |d d S )Nr  Trx  rj  r   r   r   test_isdisjoint_non_overlap1  s   z)TestBinaryOps.test_isdisjoint_non_overlapc                 C   $   | j t dA }| |t dg d S Nr  r  r   rj  r   r   r   test_sym_difference_subset5     z(TestBinaryOps.test_sym_difference_subsetc                 C   r  Nr  r  r   rj  r   r   r   test_sym_difference_superset9  r  z*TestBinaryOps.test_sym_difference_supersetc                 C   s&   | j t dA }| |t g d d S Nr  )r;   r   r  r  r   rj  r   r   r   test_sym_difference_overlap=  s   z)TestBinaryOps.test_sym_difference_overlapc                 C   s(   | j t dgA }| |t g d d S r  r   rj  r   r   r   test_sym_difference_non_overlapA  r  z-TestBinaryOps.test_sym_difference_non_overlapN)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    s&    r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+S ),TestUpdateOpsc                 C   r  r  r  r   r   r   r   r:   H  r   zTestUpdateOps.setUpc                 C   s*   |  j t dgO  _ | | j t d d S r  r   r   r   r   r   r  K  s   zTestUpdateOps.test_union_subsetc                 C   s0   |  j t g dO  _ | | j t g d d S r  r   r   r   r   r   r  O     z!TestUpdateOps.test_union_supersetc                 C   s0   |  j t g dO  _ | | j t g d d S r  r   r   r   r   r   r  S  r  z TestUpdateOps.test_union_overlapc                 C   s.   |  j t dgO  _ | | j t g d d S r  r   r   r   r   r   r  W     z$TestUpdateOps.test_union_non_overlapc                 C   .   | j t g d | | j t g d d S r  )r@   r  rD   r   r   r   r   test_union_method_call[  r  z$TestUpdateOps.test_union_method_callc                 C   s(   |  j t dM  _ | | j t d d S r  r   r   r   r   r   r  _  r  z&TestUpdateOps.test_intersection_subsetc                 C   s0   |  j t g dM  _ | | j t g d d S r  r   r   r   r   r   r  c  r  z(TestUpdateOps.test_intersection_supersetc                 C   s.   |  j t g dM  _ | | j t dg d S r  r   r   r   r   r   r  g  s   z'TestUpdateOps.test_intersection_overlapc                 C   s&   |  j t dgM  _ | | j t d S r  r~  r   r   r   r   r  k  s   z+TestUpdateOps.test_intersection_non_overlapc                 C   s,   | j t g d | | j t dg d S r  )r@   r  rD   r   r   r   r   test_intersection_method_callo  s   z+TestUpdateOps.test_intersection_method_callc                 C   *   |  j t dN  _ | | j t dg d S r  r   r   r   r   r   r  s  rB   z(TestUpdateOps.test_sym_difference_subsetc                 C   r  r  r   r   r   r   r   r  w  rB   z*TestUpdateOps.test_sym_difference_supersetc                 C   s,   |  j t dN  _ | | j t g d d S r  r   r   r   r   r   r  {     z)TestUpdateOps.test_sym_difference_overlapc                 C   s.   |  j t dgN  _ | | j t g d d S r  r   r   r   r   r   r    r  z-TestUpdateOps.test_sym_difference_non_overlapc                 C   r  r  )r@   r   rD   r   r   r   r   test_sym_difference_method_call  r  z-TestUpdateOps.test_sym_difference_method_callc                 C   s*   |  j t d8  _ | | j t dg d S r  r   r   r   r   r   test_difference_subset  rB   z$TestUpdateOps.test_difference_subsetc                 C   s(   |  j t d8  _ | | j t g  d S r  r   r   r   r   r   test_difference_superset  r  z&TestUpdateOps.test_difference_supersetc                 C   s,   |  j t d8  _ | | j t ddg d S Nr  r;   r  r   r   r   r   r   test_difference_overlap  r  z%TestUpdateOps.test_difference_overlapc                 C   s.   |  j t dg8  _ | | j t g d d S )Nr  r  r   r   r   r   r   test_difference_non_overlap  r  z)TestUpdateOps.test_difference_non_overlapc                 C   s.   | j t g d | | j t ddg d S r  )r@   r  rD   r   r   r   r   test_difference_method_call  r  z)TestUpdateOps.test_difference_method_callN)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  G  s,    r  c                   @   |   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )
TestMutatec                 C   s   g d| _ t| j | _d S )Nr  )r_  r@   r   r   r   r   r:     ru  zTestMutate.setUpc                 C   "   | j d | | j t d d S )NrM   rU   r@   r   rD   r   r   r   r   test_add_present     zTestMutate.test_add_presentc                 C   r   )Nr9   rQ   r  r   r   r   r   test_add_absent  r  zTestMutate.test_add_absentc                 C   sJ   t  }d}| jD ]}|| |d7 }| t|| q| || j  d S )Nr   r   )r@   r_  r   rD   rH   )r   tmpexpected_lenr  r   r   r   test_add_until_full  s   

zTestMutate.test_add_until_fullc                 C   r   )Nrj   Zac)r@   r   rD   r   r   r   r   test_remove_present  r  zTestMutate.test_remove_presentc                 C   s2   z| j d | d W d S  ty   Y d S w )Nr9   z7Removing missing element should have raised LookupError)r@   r   rb   LookupErrorr   r   r   r   test_remove_absent  s   zTestMutate.test_remove_absentc                 C   s@   t | j}| jD ]}| j| |d8 }| t | j| qd S r   )rH   r@   r_  r   rD   )r   r  r  r   r   r   test_remove_until_empty  s   

z"TestMutate.test_remove_until_emptyc                 C   r   )NrM   rs   r@   r   rD   r   r   r   r   test_discard_present  r  zTestMutate.test_discard_presentc                 C   r   )Nr9   rU   r  r   r   r   r   test_discard_absent  r  zTestMutate.test_discard_absentc                 C   s    | j   | t| j d d S r*   )r@   r   rD   rH   r   r   r   r   r     s   
zTestMutate.test_clearc                 C   sP   i }| j rd || j  < | j s| t|t| j | jD ]}| || qd S r   )r@   r   rD   rH   r_  rL   )r   Zpoppedr  r   r   r   r     s   
zTestMutate.test_popc                 C   $   | j d | | j t | j d S )Nr   r@   r  rD   r_  r   r   r   r   test_update_empty_tuple     z"TestMutate.test_update_empty_tuplec                 C   r  )Nr<   r  r   r   r   r   test_update_unit_tuple_overlap  r  z)TestMutate.test_update_unit_tuple_overlapc                 C   s*   | j d | | j t | jdg  d S )N)r=   rn   rn   r  r   r   r   r   "test_update_unit_tuple_non_overlap  s   z-TestMutate.test_update_unit_tuple_non_overlapN)r	   r
   r   r:   r  r  r  r  r
  r  r  r  r   r   r  r  r  r   r   r   r   r    s    	r  c                   @   s0   e Zd ZdddZdddddd	d
Zdd ZdS )TestSubsetsr   r   )<=>===!=><r  r  )r  r  r  r  r  r  c                 C   s   | j }| j}dD ]Z}|| jv }td| d t }| || |tjv r6t|tj| }||}| || tj	| }td| d t }| || |tjv rbt|tj| }||}| || qd S )N)r  r  r  r  r  r  r`   y)
leftrightcasesevallocalsrD   r  case2methodgetattrreverse)r   r`   r  r  rF   ra  methodZrcaser   r   r   test_issubset  s&   



zTestSubsets.test_issubsetN)r	   r
   r   r"  r$  r&  r   r   r   r   r    s    r  c                   @   s    e Zd Ze Ze ZdZdZdS )TestSubsetEqualEmptyz
both emptyr  r  r  Nr	   r
   r   r@   r  r  r   r  r   r   r   r   r'    s
    r'  c                   @   s,   e Zd ZeddgZeddgZdZdZdS )TestSubsetEqualNonEmptyr   r;   z
equal pairr(  Nr)  r   r   r   r   r*    s
    r*  c                   @   s&   e Zd Ze ZeddgZdZdZdS )TestSubsetEmptyNonEmptyr   r;   zone empty, one non-emptyr  r  r  Nr)  r   r   r   r   r+    s
    r+  c                   @   s*   e Zd ZedgZeddgZdZdZdS )TestSubsetPartialr   r;   z&one a non-empty proper subset of otherr,  Nr)  r   r   r   r   r-  %  s
    
r-  c                   @   s(   e Zd ZedgZedgZdZdZdS )TestSubsetNonOverlapr   r;   zneither empty, neither containsr  Nr)  r   r   r   r   r.  -  s
    

r.  c                   @   r  )TestOnlySetsInBinaryOpsc                 C   sT   |  | j| jkd |  | j| jkd |  | j| jkd |  | j| jkd d S r   )rD   r   r@   r   r   r   r   
test_eq_ne7  s   z"TestOnlySetsInBinaryOps.test_eq_nec                    s     t fdd   t fdd   t fdd   t fdd   t fdd   t fdd   t fdd   t fd	d d S )
Nc                          j  jk S r   r@   r   r   r   r   r   <lambda>?      z:TestOnlySetsInBinaryOps.test_ge_gt_le_lt.<locals>.<lambda>c                          j  jkS r   r2  r   r   r   r   r3  @  r4  c                          j  jkS r   r2  r   r   r   r   r3  A  r4  c                          j  jkS r   r2  r   r   r   r   r3  B  r4  c                      r1  r   r   r@   r   r   r   r   r3  D  r4  c                      r5  r   r8  r   r   r   r   r3  E  r4  c                      r6  r   r8  r   r   r   r   r3  F  r4  c                      r7  r   r8  r   r   r   r   r3  G  r4  )r>   r?   r   r   r   r   test_ge_gt_le_lt>  s   z(TestOnlySetsInBinaryOps.test_ge_gt_le_ltc                 C   s8   z
|  j | jO  _ W n
 ty   Y d S w | d d S Nzexpected TypeErrorr@   r   r?   rb   r   r   r   r   test_update_operatorI     z,TestOnlySetsInBinaryOps.test_update_operatorc                 C   0   | j r| j| j d S | t| jj| j d S r   )otherIsIterabler@   r  r   r>   r?   r   r   r   r   r  Q  s   z#TestOnlySetsInBinaryOps.test_updatec                    X     t fdd   t fdd  jr  j j d S   t jj j d S )Nc                          j  jB S r   r2  r   r   r   r   r3  X  r4  z4TestOnlySetsInBinaryOps.test_union.<locals>.<lambda>c                      rA  r   r8  r   r   r   r   r3  Y  r4  )r>   r?   r?  r@   rX   r   r   r   r   r   ra   W  
   z"TestOnlySetsInBinaryOps.test_unionc                 C   s8   z
|  j | jM  _ W n
 ty   Y d S w | d d S r:  r;  r   r   r   r   !test_intersection_update_operator_  r=  z9TestOnlySetsInBinaryOps.test_intersection_update_operatorc                 C   r>  r   )r?  r@   r  r   r>   r?   r   r   r   r   r	  g     z0TestOnlySetsInBinaryOps.test_intersection_updatec                    r@  )Nc                          j  j@ S r   r2  r   r   r   r   r3  p  r4  z;TestOnlySetsInBinaryOps.test_intersection.<locals>.<lambda>c                      rE  r   r8  r   r   r   r   r3  q  r4  )r>   r?   r?  r@   rk   r   r   r   r   r   ro   o  rB  z)TestOnlySetsInBinaryOps.test_intersectionc                 C   s8   z
|  j | jN  _ W n
 ty   Y d S w | d d S r:  r;  r   r   r   r   #test_sym_difference_update_operatorw  r=  z;TestOnlySetsInBinaryOps.test_sym_difference_update_operatorc                 C   r>  r   )r?  r@   r   r   r>   r?   r   r   r   r   test_sym_difference_update  rD  z2TestOnlySetsInBinaryOps.test_sym_difference_updatec                    r@  )Nc                          j  jA S r   r2  r   r   r   r   r3    r4  z=TestOnlySetsInBinaryOps.test_sym_difference.<locals>.<lambda>c                      rH  r   r8  r   r   r   r   r3    r4  )r>   r?   r?  r@   r}   r   r   r   r   r   test_sym_difference  rB  z+TestOnlySetsInBinaryOps.test_sym_differencec                 C   s8   z
|  j | j8  _ W n
 ty   Y d S w | d d S r:  r;  r   r   r   r   test_difference_update_operator  r=  z7TestOnlySetsInBinaryOps.test_difference_update_operatorc                 C   r>  r   )r?  r@   r  r   r>   r?   r   r   r   r   r    rD  z.TestOnlySetsInBinaryOps.test_difference_updatec                    r@  )Nc                          j  j S r   r2  r   r   r   r   r3    r4  z9TestOnlySetsInBinaryOps.test_difference.<locals>.<lambda>c                      rK  r   r8  r   r   r   r   r3    r4  )r>   r?   r?  r@   rx   r   r   r   r   r   rz     rB  z'TestOnlySetsInBinaryOps.test_differenceN)r	   r
   r   r0  r9  r<  r  ra   rC  r	  ro   rF  rG  rI  rJ  r  rz   r   r   r   r   r/  5  s    r/  c                   @   r   )TestOnlySetsNumericc                 C      t d| _ d| _d| _d S )Nr      Fr@   r   r?  r   r   r   r   r:        

zTestOnlySetsNumeric.setUpNr  r   r   r   r   rL    r   rL  c                   @   r   )TestOnlySetsDictc                 C   s    t d| _ ddd| _d| _d S )Nr   r;   r   )r   r   TrO  r   r   r   r   r:     s   

zTestOnlySetsDict.setUpNr  r   r   r   r   rQ    r   rQ  c                   @   r   )TestOnlySetsOperatorc                 C   s   t d| _ tj| _d| _d S )Nr   F)r@   r  r   r   r?  r   r   r   r   r:     s   

zTestOnlySetsOperator.setUpNr  r   r   r   r   rR    r   rR  c                   @   r   )TestOnlySetsTuplec                 C   rM  )Nr   r  TrO  r   r   r   r   r:     rP  zTestOnlySetsTuple.setUpNr  r   r   r   r   rS    r   rS  c                   @   r   )TestOnlySetsStringc                 C   rM  )Nr   rU   TrO  r   r   r   r   r:     rP  zTestOnlySetsString.setUpNr  r   r   r   r   rT    r   rT  c                   @   r   )TestOnlySetsGeneratorc                 C   s$   dd }t d| _ | | _d| _d S )Nc                  s   s    t dddD ]} | V  qd S )Nr   r   r;   )r   rE  r   r   r   gen  s   z(TestOnlySetsGenerator.setUp.<locals>.genr   TrO  )r   rV  r   r   r   r:     s   

zTestOnlySetsGenerator.setUpNr  r   r   r   r   rU    r   rU  c                   @   r   )TestCopyingc                 C   sd   | j  }t|td}t| j td}| t|t| tt|D ]}| || || u  q"d S Nr   )r@   r   rC   r#   rD   rH   r   ru   r   r   Zdup_listZset_listrd   r   r   r   r     s   
zTestCopying.test_copyc                 C   sd   t | j}t|td}t| jtd}| t|t| tt|D ]}| || ||  q#d S rX  )r   r   r@   rC   r#   rD   rH   r   rZ  r   r   r   test_deep_copy  s   zTestCopying.test_deep_copyN)r	   r
   r   r   r[  r   r   r   r   rW    s    rW  c                   @   r   )TestCopyingEmptyc                 C   s   t  | _ d S r   r  r   r   r   r   r:     r  zTestCopyingEmpty.setUpNr  r   r   r   r   r\    r   r\  c                   @   r   )TestCopyingSingletonc                 C      t dg| _ d S )NZhellor  r   r   r   r   r:     r   zTestCopyingSingleton.setUpNr  r   r   r   r   r]    r   r]  c                   @   r   )TestCopyingTriplec                 C   s   t g d| _ d S )N)r  r   Nr  r   r   r   r   r:     r  zTestCopyingTriple.setUpNr  r   r   r   r   r_    r   r_  c                   @   r   )TestCopyingTuplec                 C   r^  )Nr   r;   r  r   r   r   r   r:     r   zTestCopyingTuple.setUpNr  r   r   r   r   r`    r   r`  c                   @   r   )TestCopyingNestedc                 C   r^  )N)ra  )r   r   r  r   r   r   r   r:   
  r   zTestCopyingNested.setUpNr  r   r   r   r   rb  	  r   rb  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestIdentitiesc                 C   s   t d| _t d| _d S )NZabracadabraZalacazam)r@   r=   rj   r   r   r   r   r:     s   
zTestIdentities.setUpc                 C   s   | j | j}}| || |k  | || |k  | ||@ |k  | ||@ |k  | ||B |k | ||B |k | ||A ||B k  d S r   )r=   rj   ru   r   r=   rj   r   r   r   test_binopsVsSubsets  s   z#TestIdentities.test_binopsVsSubsetsc                 C   sn   | j | j}}| ||@ ||@  | ||B ||B  | ||A ||A  ||kr5| || ||  d S d S r   )r=   rj   rD   rm   rd  r   r   r   test_commutativity  s   z!TestIdentities.test_commutativityc                 C   s   | j | j}}| || ||@ B || B ||B  | ||@ ||A B ||B  | ||| B ||B  | || |B ||B  | || ||@ B | | || ||@ B | | || || B ||A  d S r   )r=   rj   rD   rd  r   r   r   test_summations&  s   $ zTestIdentities.test_summationsc                 C   sZ   | j | jt }}}| || |@ | | || |@ | | ||@ ||A @ | d S r   )r=   rj   r@   rD   )r   r=   rj   r  r   r   r   test_exclusion1  s   zTestIdentities.test_exclusionN)r	   r
   r   r:   re  rf  rg  rh  r   r   r   r   rc    s    
rc  c                 c   s    | D ]}|V  qdS )zRegular generatorNr   seqnrd   r   r   r   R:  s   rk  c                   @   r(   )GzSequence using __getitem__c                 C   r   r   rj  r   rj  r   r   r   r.   A  r&   z
G.__init__c                 C   s
   | j | S r   rm  rc   r   r   r   __getitem__C  r&   zG.__getitem__N)r	   r
   r   r'   r.   ro  r   r   r   r   rl  ?  r0   rl  c                   @   r  )	Iz Sequence using iterator protocolc                 C      || _ d| _d S r*   ri  rn  r   r   r   r.   H     
z
I.__init__c                 C      | S r   r   r   r   r   r   __iter__K  r   z
I.__iter__c                 C   2   | j t| jkr
t| j| j  }|  j d7  _ |S r   rd   rH   rj  r   r   r  r   r   r   __next__M     z
I.__next__Nr	   r
   r   r'   r.   rt  rx  r   r   r   r   rp  F  
    rp  c                   @   r(   )Igz9Sequence using iterator protocol defined with a generatorc                 C   rq  r*   ri  rn  r   r   r   r.   U  rr  zIg.__init__c                 c   s    | j D ]}|V  qd S r   rm  )r   valr   r   r   rt  X  s   
zIg.__iter__Nr	   r
   r   r'   r.   rt  r   r   r   r   r|  S      r|  c                   @   r(   )Xz Missing __getitem__ and __iter__c                 C   rq  r*   ri  rn  r   r   r   r.   ^  rr  z
X.__init__c                 C   ru  r   rv  rw  r   r   r   rx  a  ry  z
X.__next__N)r	   r
   r   r'   r.   rx  r   r   r   r   r  \  r  r  c                   @   r(   )NzIterator missing __next__()c                 C   rq  r*   ri  rn  r   r   r   r.   i  rr  z
N.__init__c                 C   rs  r   r   r   r   r   r   rt  l  r   z
N.__iter__Nr~  r   r   r   r   r  g  r  r  c                   @   r  )	EzTest propagation of exceptionsc                 C   rq  r*   ri  rn  r   r   r   r.   q  rr  z
E.__init__c                 C   rs  r   r   r   r   r   r   rt  t  r   z
E.__iter__c                 C   s   dd  d S )Nr   r   r   r   r   r   r   rx  v  r  z
E.__next__Nrz  r   r   r   r   r  o  r{  r  c                   @   r  )	SzTest immediate stopc                 C   s   d S r   r   rn  r   r   r   r.   {  r   z
S.__init__c                 C   rs  r   r   r   r   r   r   rt  }  r   z
S.__iter__c                 C   r   r   )r   r   r   r   r   rx    r   z
S.__next__Nrz  r   r   r   r   r  y  s
    r  )chainc                 C   s   t tdd ttt| S )z Test multiple tiers of iteratorsc                 S   rs  r   r   r`   r   r   r   r3    s    zL.<locals>.<lambda>)r  r   rk  r|  rl  rm  r   r   r   L  s   r  c                   @   r  )TestVariousIteratorArgsc              
   C   s   t tfD ]L}ddtddtdddfD ]<}ttttttfD ]}| 	t
|||tdt
||td q| t|t| | t|t| | t|t| qqd S )	N123rh   r   Zdog333333?    r  rY  )r@   rK   r   rl  rp  r|  r  r  rk  rD   rC   r#   r>   r?   r  r  ZeroDivisionErrorr  )r   Zconsr6   gr   r   r   r    s   *z(TestVariousIteratorArgs.test_constructorc              
   C   s   t d}ddtddtdddd	fD ]Z}|j|j|j|j|jfD ]K}ttt	t
tfD ]&}||}|||}t|trA| || q)| t|td
t|td
 q)| t|t| | t|t| | t|t| q qd S )NZnovemberr  rh   r   r  r  r  r  decemberrY  )r@   r   rX   rk   rx   r}   rt   rl  rp  r|  r  rk  
isinstanceboolrD   rC   r#   r>   r?   r  r  r  r  )r   r6   r   methr  rF   rE   r   r   r   test_inline_methods  s    
z+TestVariousIteratorArgs.test_inline_methodsc              
   C   s   ddt ddt ddddfD ]f}d	D ]a}ttttttfD ],}td
}| }t	||t
|| t	|||| | t|tdt|td q| tt	td
|t| | tt	td
|t| | tt	td
|t| qqd S )Nr  rh   r   r  r  r  r  r  )r  r  r  r   ZjanuaryrY  )r   rl  rp  r|  r  r  rk  r@   r   r#  r\   rD   rC   r#   r>   r?   r  r  r  r  )r   r   Zmethnamer  r6   r   r   r   r   test_inplace_methods  s    z,TestVariousIteratorArgs.test_inplace_methodsN)r	   r
   r   r  r  r  r   r   r   r   r    s    	r  c                   @   r   )bad_eqc                 C   s   t rt  t| |u S r   )be_badset2r   r  r   r   r   r   r      s   zbad_eq.__eq__c                 C   r   r*   r   r   r   r   r   r     r   zbad_eq.__hash__Nr	   r
   r   r    r   r   r   r   r   r    s    r  c                   @   r   )bad_dict_clearc                 C   s   t rt  | |u S r   )r  dict2r   r   r   r   r   r      s   zbad_dict_clear.__eq__c                 C   r   r*   r   r   r   r   r   r     r   zbad_dict_clear.__hash__Nr  r   r   r   r   r    s    r  c                   @   r  )TestWeirdBugsc                 C   sZ   da t h}dd tdD ada | t|jt da t h}t d iada |	t d S )NFc                 S   s   h | ]}t  qS r   )r  r   r   r   r   rO        z4TestWeirdBugs.test_8420_set_merge.<locals>.<setcomp>K   T)
r  r  r   r  r>   r  r  r  r  r   )r   set1r   r   r   test_8420_set_merge  s   
z!TestWeirdBugs.test_8420_set_mergec                 C   sX   t td}|  |td t|}|  ttd}|td t| d S )Nr3  )r@   r   r   r  r   r\   )r   r6   sir=   r   r   r   test_iter_and_mutate  s   z"TestWeirdBugs.test_iter_and_mutatec                    sB   G fddd t   fddtdD dh}| d S )Nc                       s    e Zd Zdd Z fddZdS )z.TestWeirdBugs.test_merge_and_mutate.<locals>.Xc                 S      t dS r*   )r   r   r   r   r   r        z7TestWeirdBugs.test_merge_and_mutate.<locals>.X.__hash__c                    s       dS )NF)r   )r   or   r   r   r      s   z5TestWeirdBugs.test_merge_and_mutate.<locals>.X.__eq__Nr!   r   r  r   r   r    s    r  c                    s   h | ]}  qS r   r   r   )r  r   r   rO    r  z6TestWeirdBugs.test_merge_and_mutate.<locals>.<setcomp>r   r   )r@   r   r  r   r   )r  r   r   test_merge_and_mutate  s
   z#TestWeirdBugs.test_merge_and_mutateN)r	   r
   r   r  r  r  r   r   r   r   r    s    r  c                   @   s(   e Zd ZdZdZdZdd Zdd ZdS )TestOperationsMutatingzRegression test for bpo-46615Nc                    sf   G fddd d|   fddttdD |  fddttdD dfS )	Nc                       s$   e Zd Z fddZdd ZdS )z<TestOperationsMutating.make_sets_of_bad_objects.<locals>.Badc                    s<    sdS t ddkr  t ddkr  tt dS )NF   r   r;   )r   r   r  r   enabledr  r  r   r   r      s   zCTestOperationsMutating.make_sets_of_bad_objects.<locals>.Bad.__eq__c                 S   r  r  r4  r   r   r   r   r     r  zETestOperationsMutating.make_sets_of_bad_objects.<locals>.Bad.__hash__Nr  r   r  r   r   Bad  s    r  Fc                 3   r   r   r   r   _r  r   r   r     r   zBTestOperationsMutating.make_sets_of_bad_objects.<locals>.<genexpr>2   c                 3   r   r   r   r  r  r   r   r     r   T)constructor1r   r   constructor2r   r   )r  r  r  r  r   make_sets_of_bad_objects  s     z/TestOperationsMutating.make_sets_of_bad_objectsc                 C   s`   t dD ])}|  \}}z||| W q ty- } z| dt| W Y d }~qd }~ww d S )Nr3  zchanged size during iteration)r   r  r   rL   r[   )r   functionr  r  r  r   r   r   r   check_set_op_does_not_crash  s   z2TestOperationsMutating.check_set_op_does_not_crash)r	   r
   r   r'   r  r  r  r  r   r   r   r   r    s    r  c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS ) TestBinaryOpsMutatingc                 C      |  dd  d S )Nc                 S   s   | |kS r   r   r=   rj   r   r   r   r3        z=TestBinaryOpsMutating.test_eq_with_mutation.<locals>.<lambda>r  r   r   r   r   test_eq_with_mutation  r  z+TestBinaryOpsMutating.test_eq_with_mutationc                 C   r  )Nc                 S   s   | |kS r   r   r  r   r   r   r3    r  z=TestBinaryOpsMutating.test_ne_with_mutation.<locals>.<lambda>r  r   r   r   r   test_ne_with_mutation  r  z+TestBinaryOpsMutating.test_ne_with_mutationc                 C   r  )Nc                 S   s   | |k S r   r   r  r   r   r   r3    r  z=TestBinaryOpsMutating.test_lt_with_mutation.<locals>.<lambda>r  r   r   r   r   test_lt_with_mutation  r  z+TestBinaryOpsMutating.test_lt_with_mutationc                 C   r  )Nc                 S   s   | |kS r   r   r  r   r   r   r3    r  z=TestBinaryOpsMutating.test_le_with_mutation.<locals>.<lambda>r  r   r   r   r   test_le_with_mutation  r  z+TestBinaryOpsMutating.test_le_with_mutationc                 C   r  )Nc                 S   s   | |kS r   r   r  r   r   r   r3    r  z=TestBinaryOpsMutating.test_gt_with_mutation.<locals>.<lambda>r  r   r   r   r   test_gt_with_mutation  r  z+TestBinaryOpsMutating.test_gt_with_mutationc                 C   r  )Nc                 S   s   | |kS r   r   r  r   r   r   r3     r  z=TestBinaryOpsMutating.test_ge_with_mutation.<locals>.<lambda>r  r   r   r   r   test_ge_with_mutation  r  z+TestBinaryOpsMutating.test_ge_with_mutationc                 C   r  )Nc                 S   s   | |@ S r   r   r  r   r   r   r3  #  r  z>TestBinaryOpsMutating.test_and_with_mutation.<locals>.<lambda>r  r   r   r   r   test_and_with_mutation"  r  z,TestBinaryOpsMutating.test_and_with_mutationc                 C   r  )Nc                 S   s   | |B S r   r   r  r   r   r   r3  &  r  z=TestBinaryOpsMutating.test_or_with_mutation.<locals>.<lambda>r  r   r   r   r   test_or_with_mutation%  r  z+TestBinaryOpsMutating.test_or_with_mutationc                 C   r  )Nc                 S   s   | | S r   r   r  r   r   r   r3  )  r  z>TestBinaryOpsMutating.test_sub_with_mutation.<locals>.<lambda>r  r   r   r   r   test_sub_with_mutation(  r  z,TestBinaryOpsMutating.test_sub_with_mutationc                 C   r  )Nc                 S   s   | |A S r   r   r  r   r   r   r3  ,  r  z>TestBinaryOpsMutating.test_xor_with_mutation.<locals>.<lambda>r  r   r   r   r   test_xor_with_mutation+  r  z,TestBinaryOpsMutating.test_xor_with_mutationc                 C      dd }|  | d S )Nc                 S   s   | |M } d S r   r   r  r   r   r   rr   /  r  z8TestBinaryOpsMutating.test_iadd_with_mutation.<locals>.fr  r@  r   r   r   test_iadd_with_mutation.     z-TestBinaryOpsMutating.test_iadd_with_mutationc                 C   r  )Nc                 S   s   | |O } d S r   r   r  r   r   r   rr   4  r  z7TestBinaryOpsMutating.test_ior_with_mutation.<locals>.fr  r@  r   r   r   test_ior_with_mutation3  r  z,TestBinaryOpsMutating.test_ior_with_mutationc                 C   r  )Nc                 S   s   | |8 } d S r   r   r  r   r   r   rr   9  r  z8TestBinaryOpsMutating.test_isub_with_mutation.<locals>.fr  r@  r   r   r   test_isub_with_mutation8  r  z-TestBinaryOpsMutating.test_isub_with_mutationc                 C   r  )Nc                 S   s   | |N } d S r   r   r  r   r   r   rr   >  r  z8TestBinaryOpsMutating.test_ixor_with_mutation.<locals>.fr  r@  r   r   r   test_ixor_with_mutation=  r  z-TestBinaryOpsMutating.test_ixor_with_mutationc                 C   s:   dd }dd }dd }|  | |  | |  | d S )Nc                 S   s   | D ]}q|D ]}qd S r   r   r=   rj   r`   r  r   r   r   f1C  
   z>TestBinaryOpsMutating.test_iteration_with_mutation.<locals>.f1c                 S   s   |D ]}q| D ]}qd S r   r   )r=   rj   r  r`   r   r   r   f2H  r  z>TestBinaryOpsMutating.test_iteration_with_mutation.<locals>.f2c                 S   s   t | |D ]\}}qd S r   )zipr  r   r   r   f3M  s   z>TestBinaryOpsMutating.test_iteration_with_mutation.<locals>.f3r  )r   r  r  r  r   r   r   test_iteration_with_mutationB  s   

z2TestBinaryOpsMutating.test_iteration_with_mutationN)r	   r
   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s     r  c                   @      e Zd ZeZeZdS )TestBinaryOpsMutating_Set_SetNr	   r
   r   r@   r  r  r   r   r   r   r  U  r,  r  c                   @   r  )'TestBinaryOpsMutating_Subclass_SubclassNr	   r
   r   r)  r  r  r   r   r   r   r  Y  r,  r  c                   @   r*  )"TestBinaryOpsMutating_Set_SubclassNr	   r
   r   r@   r  r)  r  r   r   r   r   r  ]  r,  r  c                   @   r*  )"TestBinaryOpsMutating_Subclass_SetNr	   r
   r   r)  r  r@   r  r   r   r   r   r  a  r,  r  c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestMethodsMutatingc                 C      |  tj d S r   )r  r@   r   r   r   r   r   test_issubset_with_mutationh  r   z/TestMethodsMutating.test_issubset_with_mutationc                 C   r  r   )r  r@   r   r   r   r   r   test_issuperset_with_mutationk  r   z1TestMethodsMutating.test_issuperset_with_mutationc                 C   r  r   )r  r@   rk   r   r   r   r   test_intersection_with_mutationn  r   z3TestMethodsMutating.test_intersection_with_mutationc                 C   r  r   )r  r@   rX   r   r   r   r   test_union_with_mutationq  r   z,TestMethodsMutating.test_union_with_mutationc                 C   r  r   )r  r@   rx   r   r   r   r   test_difference_with_mutationt  r   z1TestMethodsMutating.test_difference_with_mutationc                 C   r  r   )r  r@   r}   r   r   r   r   'test_symmetric_difference_with_mutationw  r   z;TestMethodsMutating.test_symmetric_difference_with_mutationc                 C   r  r   )r  r@   rt   r   r   r   r   test_isdisjoint_with_mutationz  r   z1TestMethodsMutating.test_isdisjoint_with_mutationc                 C   r  r   )r  r@   r  r   r   r   r   $test_difference_update_with_mutation}  r   z8TestMethodsMutating.test_difference_update_with_mutationc                 C   r  r   )r  r@   r  r   r   r   r   &test_intersection_update_with_mutation  r   z:TestMethodsMutating.test_intersection_update_with_mutationc                 C   r  r   )r  r@   r   r   r   r   r   .test_symmetric_difference_update_with_mutation  r   zBTestMethodsMutating.test_symmetric_difference_update_with_mutationc                 C   r  r   )r  r@   r  r   r   r   r   test_update_with_mutation  r   z-TestMethodsMutating.test_update_with_mutationN)r	   r
   r   r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r  f  s    r  c                   @   r  )TestMethodsMutating_Set_SetNr  r   r   r   r   r    r,  r  c                   @   r  )%TestMethodsMutating_Subclass_SubclassNr  r   r   r   r   r    r,  r  c                   @   r*  ) TestMethodsMutating_Set_SubclassNr  r   r   r   r   r    r,  r  c                   @   r*  ) TestMethodsMutating_Subclass_SetNr  r   r   r   r   r    r,  r  c                   @   s   e Zd ZeZejZdS )TestMethodsMutating_Set_DictN)r	   r
   r   r@   r  r7   r8   r  r   r   r   r   r    s    
r  c                   @   r*  )TestMethodsMutating_Set_ListN)r	   r
   r   r@   r  r\   r  r   r   r   r   r    r,  r  c                 c   sZ    t | } ztt| g}t| D ]
}|V  ||B V  qW dS  ty,   t V  Y dS w )z-Generates all subsets of a set or sequence U.N)r   rK   r   rK  r   )Ur`   r  r   r   r   rK    s   rK  c                    s0   dd t | D  t fddtt | D S )z!Graph of n-dimensional hypercube.c                 S   s   g | ]}t |gqS r   rK   )r   r`   r   r   r   r6    s    zcube.<locals>.<listcomp>c                    s&   g | ]  t  fd dD fqS )c                    s   g | ]} |A qS r   r   )r   r6   r  r   r   r6    r7  z#cube.<locals>.<listcomp>.<listcomp>r  )r   Z
singletonsr  r   r6    s    )r   r7   rK  r5  r   r  r   cube  s   
r  c                    sh   i }| D ]- |   D ]& fdd|   D } fdd|  D }t || |t  g< q
q|S )zGraph, the vertices of which are edges of G,
    with two vertices being adjacent iff the corresponding
    edges share a vertex.c                    s    g | ]}|krt  |gqS r   r  r   rn   r`   r  r   r   r6         zlinegraph.<locals>.<listcomp>c                    s    g | ]}| krt |gqS r   r  r  r  r   r   r6    r  r  )rl  r  Znxnyr   r  r   	linegraph  s   r  c                 C   s   t  }|  D ]f\}}|D ]_}| | D ]X}||krq|| | v r+|t|||g q| | D ];}||kr6q/|| | v rH|t||||g q/| | D ]}||ksV||krWqL|| | v ri|t|||||g qLq/qqq|S )zKReturn a set of faces in G.  Where a face is a set of vertices on that face)r@   itemsr   rK   )rl  rr   r   edgesr   Zv3Zv4Zv5r   r   r   faces  s0   r  c                   @   r   )
TestGraphsc                 C   s   t d}t|}| t|d | D ]
}| t|d qtdd | D }| || t|}| t|d |D ]
}| t|d q>d S )Nr   r  c                 s       | ]
}|D ]}|V  qqd S r   r   )r   r  r  r   r   r   r         z'TestGraphs.test_cube.<locals>.<genexpr>r  r   )r  r@   rD   rH   r_  r  )r   r  Z	vertices1edgeZ	vertices2Z	cubefacesfacer   r   r   	test_cube  s   zTestGraphs.test_cubec                 C   s   t d}t|}| t|d t|}| D ]
}| t|d qtdd | D }| || t|}tt	}|D ]}|t|  d7  < q?| |d d | |d d |D ]}	|	}
| t|
d	 |
D ]}| 
|| qlq^d S )
Nr      r   c                 s   r  r   r   )r   r  r  r   r   r   r     r  z0TestGraphs.test_cuboctahedron.<locals>.<genexpr>r   r  r  r;   )r  r  rD   rH   r@   r_  r  r   defaultdictr/   rL   )r   r  ZcuboctahedronZverticesr  ZotherverticesZ	cubofacesZ	facesizesr  Zvertexr  Zcubevertr   r   r   test_cuboctahedron  s*   
zTestGraphs.test_cuboctahedronN)r	   r
   r   r  r   r   r   r   r   r    s    r  __main__)jr(  testr   Ztest.supportr   r   r   r  r   r   randomr   r   r  r   collections.abcrI  	Exceptionr   r   r   r"   r/   r)   r1   ZTestCaser   r@   r)  r+  r-  r0  r2  rK   rQ  rR  rn  rV  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r'  r*  r+  r-  r.  r/  rL  rQ  rR  rS  rT  rU  rW  r\  r]  r_  r`  rb  rc  rk  rl  rp  r|  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rK  r  r  r  r  r	   mainr   r   r   r   <module>   s      <  IjIVJ&t+	
	)	)$G$
1