B
    u9a                @   s  d dl 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.d/ d/e#e jZ*d0d1 Z+d2d3 Z,G d4d5 d5e jZ-G d6d7 d7e jZ.G d8d9 d9e jZ/G d:d; d;e jZ0G d<d= d=e jZ1G d>d? d?Z2G d@dA dAe2e jZ3G dBdC dCe2e jZ4G dDdE dEe2e jZ5G dFdG dGe2e jZ6G dHdI dIe2e jZ7G dJdK dKZ8G dLdM dMe8e jZ9G dNdO dOe8e jZ:G dPdQ dQe8e jZ;G dRdS dSe8e jZ<G dTdU dUe8e jZ=G dVdW dWe8e jZ>G dXdY dYZ?G dZd[ d[e?e jZ@G d\d] d]e?e jZAG d^d_ d_e?e jZBG d`da dae?e jZCG dbdc dce?e jZDG ddde dee jZEdfdg ZFG dhdi diZGG djdk dkZHG dldm dmZIG dndo doZJG dpdq dqZKG drds dsZLG dtdu duZMd dvlmNZN dwdx ZOG dydz dze jZPG d{d| d|ZQG d}d~ d~ZRG dd de jZSdd ZTdd ZUdd ZVdd ZWG dd de jZXeYdkre Z  dS )    N)support)	randrangeshufflec               @   s   e Zd ZdS )PassThruN)__name__
__module____qualname__ r	   r	   /usr/lib/python3.7/test_set.pyr      s   r   c               c   s   t dV  d S )N   )r   r	   r	   r	   r
   check_pass_thru   s    r   c               @   s   e Zd Zdd Zdd ZdS )BadCmpc             C   s   dS )Nr   r	   )selfr	   r	   r
   __hash__   s    zBadCmp.__hash__c             C   s   t d S )N)RuntimeError)r   otherr	   r	   r
   __eq__   s    zBadCmp.__eq__N)r   r   r   r   r   r	   r	   r	   r
   r      s   r   c               @   s   e Zd Zdd ZdS )ReprWrapperc             C   s
   t | jS )N)reprvalue)r   r	   r	   r
   __repr__   s    zReprWrapper.__repr__N)r   r   r   r   r	   r	   r	   r
   r      s   r   c               @   s   e Zd Zdd Zdd ZdS )HashCountingIntc             G   s
   d| _ d S )Nr   )
hash_count)r   argsr	   r	   r
   __init__"   s    zHashCountingInt.__init__c             C   s   |  j d7  _ t| S )Nr   )r   intr   )r   r	   r	   r
   r   $   s    zHashCountingInt.__hash__N)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+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9S ):TestJointOpsc             C   s2   d | _ }d| _d| _| || _t|| _d S )NZ
simsalabimZ
madagascarZ4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ)word	otherwordlettersthetypesdictfromkeysd)r   r   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	TypeErrorr    setr   )r   r	   r	   r
   test_new_or_init2   s    zTestJointOps.test_new_or_initc             C   sH   t | j}t | j}| || | t| jt  | t| jg g d S )N)	sortedr!   r$   assertEqualr(   r   r    r   r)   )r   actualexpectedr	   r	   r
   test_uniquification6   s
    

z TestJointOps.test_uniquificationc             C   s   |  t| jt| j d S )N)r-   lenr!   r$   )r   r	   r	   r
   test_len=   s    zTestJointOps.test_lenc             C   sf   x&| j D ]}| || jk|| jk qW | t| jjg g | t| j g}| 	| | j | d S )N)
r   r-   r!   r$   r(   r)   __contains__r    	frozensetassertIn)r   cr!   r	   r	   r
   test_contains@   s
    zTestJointOps.test_containsc             C   s  | j | j}x.| jD ]$}| ||k|| jkp6|| jk qW | | j | | j | t|| j	 | 
t| j jt  | 
t| j jg g xtttjtttfD ]}| | d|dtd | | d|dtd | | d|dtd | | d|dtd	 | | d|d|d
td qW |  }| |tdg|tdg| ddg d S )NabcbacdcabcdefgfeabcefgccbabcefabcefZfgr   r&   )r!   unionr   r   r-   r$   r    r   typebasetyper(   r   r   r)   r*   r4   r"   r#   strlisttuple)r   ur6   Cxr	   r	   r
   
test_unionG   s    $    *zTestJointOps.test_unionc             C   sr   | j | j}| | j t| jB | | | j t| jB | y| j | jB  W n tk
rb   Y nX | d d S )Nz(s|t did not screen-out general iterables)r!   rA   r   r-   r*   r4   r)   fail)r   ir	   r	   r
   test_orZ   s    zTestJointOps.test_orc             C   s  | j | j}x.| jD ]$}| ||k|| jko6|| jk qW | | j | | j | t|| j	 | 
t| j jt  xtttjtttfD ]}| | d|dtd | | d|dtd | | d|dtd | | d|dtd | | d|d	|d
td qW | d}| }| jt krr| t|t| n| t|t| d S )Nr8   r9   ccr;    r=   bcr?   ZcbcfZbagb)r!   intersectionr   r   r-   r$   r    r   rB   rC   r(   r   r   r*   r4   r"   r#   rD   rE   rF   idassertNotEqual)r   rL   r6   rH   r!   zr	   r	   r
   test_intersectione   s"    $    *
zTestJointOps.test_intersectionc       	      C   s   dd }x~dD ]v}|  |}xfdD ]^}xXtttjtttfD ]B}||}||}|||}| 	|| | 
|dkpx|dk q:W q"W qW d S )Nc             S   s   t | | S )N)r*   rR   )s1s2r	   r	   r
   fz   s    z'TestJointOps.test_isdisjoint.<locals>.f)
rO   r'   abr>   Zababacr9   rN   r;   r=   r?   TF)r    r*   r4   r"   r#   rD   rE   rF   
isdisjointr-   
assertTrue)	r   rY   ZlargrW   ZrargrH   rX   r.   r/   r	   r	   r
   test_isdisjointy   s    




zTestJointOps.test_isdisjointc             C   sr   | j | j}| | j t| j@ | | | j t| j@ | y| j | j@  W n tk
rb   Y nX | d d S )Nz(s&t did not screen-out general iterables)r!   rR   r   r-   r*   r4   r)   rK   )r   rL   r	   r	   r
   test_and   s    zTestJointOps.test_andc             C   sn  | j | j}x.| jD ]$}| ||k|| jko6|| jk qW | | j | | j | t|| j	 | 
t| j jt  | 
t| j jg g xtttjtttfD ]}| | d|dtd | | d|dtd | | d|dtd | | d|dtd | | d td | | d|d|d	td
 qW d S )Nr8   r9   rZ   r;   r>   r=   r'   r?   rQ   r6   )r!   
differencer   r   r-   r$   r    r   rB   rC   r(   r   r   r)   r*   r4   r"   r#   rD   rE   rF   )r   rL   r6   rH   r	   r	   r
   test_difference   s    $    zTestJointOps.test_differencec             C   sr   | j | j}| | j t| j | | | j t| j | y| j | j  W n tk
rb   Y nX | d d S )Nz(s-t did not screen-out general iterables)r!   r_   r   r-   r*   r4   r)   rK   )r   rL   r	   r	   r
   test_sub   s    zTestJointOps.test_subc             C   s.  | j | j}x.| jD ]$}| ||k|| jk|| jkA  qW | | j | | j | t|| j	 | 
t| j jt  | 
t| j jg g xtttjtttfD ]}| | d|dtd | | d|dtd | | d|dtd | | d|dtd	 qW d S )
Nr8   r9   abdr;   r<   r=   r'   r?   r@   )r!   symmetric_differencer   r   r-   r$   r    r   rB   rC   r(   r   r   r)   r*   r4   r"   r#   rD   rE   rF   )r   rL   r6   rH   r	   r	   r
   test_symmetric_difference   s    $   z&TestJointOps.test_symmetric_differencec             C   sr   | j | j}| | j t| jA | | | j t| jA | y| j | jA  W n tk
rb   Y nX | d d S )Nz(s^t did not screen-out general iterables)r!   rc   r   r-   r*   r4   r)   rK   )r   rL   r	   r	   r
   test_xor   s    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)r-   r!   r*   r   r4   rT   r   )r   r	   r	   r
   test_equality   s    zTestJointOps.test_equalityc             C   s2   t tdddddg}| |}| t|d d S )NZabcdefZbcdZbdcbZfedZfedccba   )mapr4   r    r-   r1   )r   tr!   r	   r	   r
   test_setOfFrozensets   s    
z!TestJointOps.test_setOfFrozensetsc             C   s   t | jdddg\}}}| ||k  | ||k | ||k | ||k | ||k | ||k  | ||k | ||k | ||k | tdd | tdd | tdd | tdd d S )NrZ   Zabcdedefr'   r>   Zcbs)rh   r    r\   ZassertFalser*   issubset
issuperset)r   pqrr	   r	   r
   test_sub_and_super   s    zTestJointOps.test_sub_and_superc             C   s   xt tjd D ]z}t| j|}t|}| | j|d| j|f  t| jtt	fkrd| j_
t| j|}t|}| | jj
|j
 qW d S )Nr   z%s != %s
   )rangepickleHIGHEST_PROTOCOLdumpsr!   loadsr-   rB   r*   r4   rI   )r   rL   rn   dupr	   r	   r
   test_pickling   s    

zTestJointOps.test_picklingc          	   C   s   xt tjd D ]}t| j}| | j}t||}t|}| |t	j
j | | || t|}yt|}W n tk
r   wY nX t||}t|}| | ||| |f  qW d S )Nr   )rs   rt   ru   iterr!   r    rv   rw   ZassertIsInstancecollectionsr>   Iteratorr-   nextStopIteration)r   protoZitorgdatar$   itZdropr	   r	   r
   test_iterator_pickling   s    



z#TestJointOps.test_iterator_picklingc                s   G  fddd  d}|  |g}t|}| t|t| x|D ]}|}qJW | 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   s
   || _ d S )N)r   )r   r   r	   r	   r
   r     s    z3TestJointOps.test_deepcopy.<locals>.Tracer.__init__c             S   s   | j S )N)r   )r   r	   r	   r
   r     s    z3TestJointOps.test_deepcopy.<locals>.Tracer.__hash__Nc                s    | j d S )Nr   )r   )r   Zmemo)Tracerr	   r
   __deepcopy__	  s    z7TestJointOps.test_deepcopy.<locals>.Tracer.__deepcopy__)N)r   r   r   r   r   r   r	   )r   r	   r
   r     s   r   rr   r   )r    copydeepcopyrT   rS   r-   r   )r   ri   r!   rx   elemZnewtr	   )r   r
   test_deepcopy  s    

zTestJointOps.test_deepcopyc                sR   G dd d t  fddtdD }x$|D ]}||_||_t |g|_ q.W d S )Nc               @   s   e Zd ZdS )zTestJointOps.test_gc.<locals>.AN)r   r   r   r	   r	   r	   r
   A  s   r   c             3   s   | ]}  V  qd S )Nr	   ).0rL   )r   r	   r
   	<genexpr>  s    z'TestJointOps.test_gc.<locals>.<genexpr>i  )r*   rs   cyclesub)r   r!   r   r	   )r   r
   test_gc  s    
zTestJointOps.test_gcc             C   sV   G dd d| j }| }t }|| | || || || || d S )Nc               @   s   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   rS   )r   r	   r	   r
   r   !  s    z?TestJointOps.test_subclass_with_custom_hash.<locals>.H.__hash__N)r   r   r   r   r	   r	   r	   r
   H   s   r   )r    r*   addr5   removediscard)r   r   r!   rY   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rx| t|jt  | t|jt  | t|jt  d S )Nr   )	r    r   r(   r   r3   hasattrr   r   r   )r   r!   r	   r	   r
   test_badcmp+  s    
zTestJointOps.test_badcmpc             C   sb   t  }| |g}||_| jtkr4| t|d n*t|dd }| t|d||f  d S )Nz
{set(...)}(r   z%s({%s(...)}))r   r    r   r*   r-   r   	partition)r   wr!   namer	   r	   r
   test_cyclical_repr6  s    
zTestJointOps.test_cyclical_reprc          	   C   sz   t  }| |g}||_ttjd}z:|t| |  ttjd}| 	|
 t| W d |  ttj X d S )Nr   rp   )r   r    r   openr   TESTFNwriterD   closer-   readr   unlink)r   r   r!   for	   r	   r
   test_cyclical_print@  s    z TestJointOps.test_cyclical_printc             C   s:  d}t ttt|}| tdd |D | | |}| tdd |D | || | tdd |D | t	|dr|
| | 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 )Nrr   c             s   s   | ]}|j V  qd S )N)r   )r   r   r	   r	   r
   r   Q  s    z<TestJointOps.test_do_not_rehash_dict_keys.<locals>.<genexpr>c             s   s   | ]}|j V  qd S )N)r   )r   r   r	   r	   r
   r   S  s    c             s   s   | ]}|j V  qd S )N)r   )r   r   r	   r	   r
   r   U  s    symmetric_difference_updatec             s   s   | ]}|j V  qd S )N)r   )r   r   r	   r	   r
   r   X  s    c             s   s   | ]}|j V  qd S )N)r   )r   r   r	   r	   r
   r   Z  s    c             s   s   | ]}|j V  qd S )N)r   )r   r   r	   r	   r
   r   \  s    {   c             s   s   | ]}|j V  qd S )N)r   )r   r   r	   r	   r
   r   ^  s    )r"   r#   rh   r   rs   r-   sumr    r_   r   r   r*   r4   )r   nr$   r!   Zd2Zd3r	   r	   r
   test_do_not_rehash_dict_keysN  s"    



z)TestJointOps.test_do_not_rehash_dict_keysc             C   sX   G dd dt }| }t|}t|dg}t||_~~t  | | d kd d S )Nc               @   s   e Zd ZdS )z/TestJointOps.test_container_iterator.<locals>.CN)r   r   r   r	   r	   r	   r
   rH   c  s   rH   r   zCycle was not collected)	objectweakrefrefr*   rz   rI   gcZcollectr\   )r   rH   objr   	containerr	   r	   r
   test_container_iteratora  s    

z$TestJointOps.test_container_iteratorc             C   s   t | t| j d S )N)r   Zcheck_free_after_iteratingrz   r    )r   r	   r	   r
   test_free_after_iteratingm  s    z&TestJointOps.test_free_after_iteratingN)r   r   r   r%   r+   r0   r2   r7   rJ   rM   rV   r]   r^   r`   ra   rd   re   rf   rj   rq   ry   r   r   r   r   r   r   r   r   r   r   r	   r	   r	   r
   r   (   s8   

r   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   )r    r   r   r-   r*   r   r(   r)   )r   r!   r	   r	   r
   	test_initt  s    zTestSet.test_initc             C   s0   |  td}|  |}| t|t| d S )Nrg   )r    rs   rT   rS   )r   r!   ri   r	   r	   r
   test_constructor_identity}  s    
z!TestSet.test_constructor_identityc             C   s(   t dddg}dddh}| || d S )Nr   r&   rg   )r*   r-   )r   r!   ri   r	   r	   r
   test_set_literal  s    
zTestSet.test_set_literalc             C   s6   dddh}|  t|d | }|  t|t d S )Nr   g      ?T)r-   r1   poprB   r   )r   r!   Zstored_valuer	   r	   r
    test_set_literal_insertion_order  s    
z(TestSet.test_set_literal_insertion_orderc                s<   g   fdd}|d|d|dh}|   dddg d S )Nc                s     |  d S )N)append)r   )eventsr	   r
   record  s    z9TestSet.test_set_literal_evaluation_order.<locals>.recordr   r&   rg   )r-   )r   r   r!   r	   )r   r
   !test_set_literal_evaluation_order  s    z)TestSet.test_set_literal_evaluation_orderc             C   s   |  tt| j d S )N)r(   r)   hashr!   )r   r	   r	   r
   	test_hash  s    zTestSet.test_hashc             C   s0   | j   | | j t  | t| j d d S )Nr   )r!   clearr-   r*   r1   )r   r	   r	   r
   
test_clear  s    
zTestSet.test_clearc             C   sD   | j  }| | j | | t| j t| | t|| j d S )N)r!   r   r-   rT   rS   rB   rC   )r   rx   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)r!   r   r5   r   r-   r(   r)   )r   rx   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   )
r!   r   assertNotInr(   KeyErrorr)   r    r4   r   r5   )r   r!   r	   r	   r
   test_remove  s    zTestSet.test_removec             C   sd   x^dD ]V}y| j | W n8 tk
rR } z|jd }| || W d d }~X Y qX |   qW d S )N)r   )r   r   )r!   r   r   r   r-   rK   )r   v1ev2r	   r	   r
   test_remove_keyerror_unpacking  s    

z&TestSet.test_remove_keyerror_unpackingc             C   sr   |  ddg}y| j| W nF tk
rd } z(| |jd |kd||jd  W d d }~X Y n
X |   d S )Nrg      r   zKeyError should be {0}, not {1})r    r!   r   r   r\   r   formatrK   )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 )Nr'   r   )	r!   r   r   r(   r)   r    r4   r   r5   )r   r!   r	   r	   r
   test_discard  s    zTestSet.test_discardc             C   sD   x.t t| jD ]}| j }| || j qW | t| jj d S )N)rs   r1   r!   r   r   r(   r   )r   rL   r   r	   r	   r
   test_pop  s    
zTestSet.test_popc          	   C   s<  | j | j}| |d  x"| j| j D ]}| || j  q(W | t| j jt  | t	| j jg g x\dD ]T\}}xJt
ttjtttfD ]4}| d}| |||d  | |t
| qW qlW xrdD ]j}d}x`t
ttjtttfD ]J}| d}| |||||d  | |t
|t
|B t
|B  qW qW d S )N))r9   r:   )r;   r<   )r=   r>   )r?   r@   r8   )r9   r;   r=   r?   ZabcdaZahi)r!   updater   r-   r   r5   r(   r   r   r)   r*   r4   r"   r#   rD   rE   rF   r    )r   retvalr6   rn   ro   rH   r!   r	   r	   r
   test_update  s"    


zTestSet.test_updatec             C   s<   |  j t| jO  _ x"| j| j D ]}| || j  q"W d S )N)r!   r*   r   r   r5   )r   r6   r	   r	   r
   test_ior  s    zTestSet.test_iorc       	   	   C   s:  | j | j}| |d  xF| j| j D ]6}|| jkrP|| jkrP| || j  q(| || j  q(W | t| j jt	  | t
| j jg g xdD ]\}}xtttjtttfD ]}| d}| |||d  | |t| d}| |}d}| |||||d  | |tdt|@ t|@  qW qW d S )N))r9   r6   )r;   rO   )r=   rP   )r?   rO   r8   Zcbc)r!   intersection_updater   r-   r   r5   r   r(   r   r   r)   r*   r4   r"   r#   rD   rE   rF   r    )	r   r   r6   rn   ro   rH   r!   ssri   r	   r	   r
   test_intersection_update  s$    

z TestSet.test_intersection_updatec             C   s`   |  j t| jM  _ xF| j| j D ]6}|| jkrJ|| jkrJ| || j  q"| || j  q"W d S )N)r!   r*   r   r   r5   r   )r   r6   r	   r	   r
   	test_iand  s
    zTestSet.test_iandc             C   s~  | j | j}| |d  xF| j| j D ]6}|| jkrP|| jkrP| || j  q(| || j  q(W | t| j jt	  | t
| j jg g | t
| j jg g xdD ]\}}xtttjtttfD ]}| d}| |||d  | |t| | d}|  | || d | d}||d | || d | d}||d|d | || d qW qW d S )N))r9   rZ   )r;   r>   )r=   r'   )r?   r>   r8   Z
abcdefghihZabaZcdefghihr9   Zefghih)r!   difference_updater   r-   r   r5   r   r(   r   r   r)   r   r*   r4   r"   r#   rD   rE   rF   r    )r   r   r6   rn   ro   rH   r!   r	   r	   r
   test_difference_update  s.    



zTestSet.test_difference_updatec             C   s`   |  j t| j8  _ xF| j| j D ]6}|| jkrJ|| jkrJ| || j  q"| || j  q"W d S )N)r!   r*   r   r   r5   r   )r   r6   r	   r	   r
   	test_isub0  s
    zTestSet.test_isubc             C   s   | j | j}| |d  xF| j| j D ]6}|| jk|| jkA rP| || j  q(| || j  q(W | t| j jt	  | t
| j jg g x\dD ]T\}}xJtttjtttfD ]4}| d}| |||d  | |t| qW qW d S )N))r9   rb   )r;   r<   )r=   r'   )r?   r@   r8   )r!   r   r   r-   r   r5   r   r(   r   r   r)   r*   r4   r"   r#   rD   rE   rF   r    )r   r   r6   rn   ro   rH   r!   r	   r	   r
    test_symmetric_difference_update8  s    
z(TestSet.test_symmetric_difference_updatec             C   s`   |  j t| jN  _ xF| j| j D ]6}|| jk|| jkA rJ| || j  q"| || j  q"W d S )N)r!   r*   r   r   r5   r   )r   r6   r	   r	   r
   	test_ixorH  s
    zTestSet.test_ixorc             C   st   | j  }||O }| || j  ||M }| || j  ||8 }| ||   | j  }||N }| ||   d S )N)r!   r   r-   r    )r   ri   r	   r	   r
   test_inplace_on_selfP  s    

zTestSet.test_inplace_on_selfc             C   s>   |  d}t|}| t|t| d }| tt| d S )NZgallahad)r    r   proxyr-   rD   r(   ReferenceError)r   r!   rn   r	   r	   r
   test_weakref\  s
    

zTestSet.test_weakrefc             C   s   G dd d}dddh}| }||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   s
   d| _ dS )NTF)	gt_called)r   some_setr	   r	   r
   __gt__e  s    z<TestSet.test_rich_compare.<locals>.TestRichSetCompare.__gt__c             S   s
   d| _ dS )NTF)	lt_called)r   r   r	   r	   r
   __lt__h  s    z<TestSet.test_rich_compare.<locals>.TestRichSetCompare.__lt__c             S   s
   d| _ dS )NTF)	ge_called)r   r   r	   r	   r
   __ge__k  s    z<TestSet.test_rich_compare.<locals>.TestRichSetCompare.__ge__c             S   s
   d| _ dS )NTF)	le_called)r   r   r	   r	   r
   __le__n  s    z<TestSet.test_rich_compare.<locals>.TestRichSetCompare.__le__N)r   r   r   r   r   r   r   r	   r	   r	   r
   TestRichSetCompared  s   r   r   r&   rg   )r\   r   r   r   r   )r   r   ZmysetZmyobjr	   r	   r
   test_rich_comparec  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)r-   r*   r   )r   r	   r	   r
   r     s    zTestSet.test_c_apiN)#r   r   r   r*   r    rC   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   p  s:   	$r   c               @   s   e Zd ZdS )SetSubclassN)r   r   r   r	   r	   r	   r
   r     s   r   c               @   s   e Zd ZeZeZdS )TestSetSubclassN)r   r   r   r   r    r*   rC   r	   r	   r	   r
   r     s   r   c               @   s   e Zd Zg dfddZdS )SetSubclassWithKeywordArgsNc             C   s   t | | d S )N)r*   r   )r   iterablenewargr	   r	   r
   r     s    z#SetSubclassWithKeywordArgs.__init__)r   r   r   r   r	   r	   r	   r
   r     s   r   c               @   s   e Zd Zdd ZdS )TestSetSubclassWithKeywordArgsc             C   s   t dd d S )Nr   )r   )r   )r   r	   r	   r
   test_keywords_in_subclass  s    z8TestSetSubclassWithKeywordArgs.test_keywords_in_subclassN)r   r   r   r   r	   r	   r	   r
   r     s   r   c               @   sT   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S )TestFrozenSetc             C   s.   |  | j}|| j | |t| j d S )N)r    r   r   r   r-   r*   )r   r!   r	   r	   r
   r     s    zTestFrozenSet.test_initc             C   sn   t  }t  t g t dt dt  t g t dt dt tdt t  t ||g}| tttt|d d S )Nr	   rO   r   r   )r4   rs   r-   r1   r*   rh   rS   )r   rY   efsr	   r	   r
   test_singleton_empty_frozenset  s    z,TestFrozenSet.test_singleton_empty_frozensetc             C   s0   |  td}|  |}| t|t| d S )Nrg   )r    rs   r-   rS   )r   r!   ri   r	   r	   r
   r     s    
z'TestFrozenSet.test_constructor_identityc                s   |  t| dt| d d  fddt D }t }x,tdD ] }t| |t| | qJW |  t|d d S )NZabcdebZebecdad   c                s   g | ]}t  qS r	   )r   )r   rL   )r   r	   r
   
<listcomp>  s    z+TestFrozenSet.test_hash.<locals>.<listcomp>   r   )r-   r   r    rs   r*   r   r   r1   )r   seqresultsrL   r	   )r   r
   r     s    zTestFrozenSet.test_hashc             C   s$   | j  }| t| j t| d S )N)r!   r   r-   rS   )r   rx   r	   r	   r
   r     s    
zTestFrozenSet.test_copyc             C   sr   t tdt d dg }| |}| t|}| || | t|t| i }d||< | || d d S )Nrr   ZabcdefgZapple*   )rE   rs   r    reversedr-   rT   rS   )r   r   Zkey1Zkey2r$   r	   r	   r
   test_frozen_as_dictkey  s    
z$TestFrozenSet.test_frozen_as_dictkeyc             C   s"   |  d}| t|t| d S )NZabcdcda)r    r-   r   )r   rY   r	   r	   r
   test_hash_caching  s    
zTestFrozenSet.test_hash_cachingc       
   	      s   d}t  }|j}dd t|D }x2td| D ]" |tt fdd|D  q0W | t|d|  dd }dd	 }xftd
D ]Z}d| }|d xDt|fD ]8}tfddtt|||D }	| d|	 | qW qW d S )N   c             S   s   g | ]}|d  d |> fqS )r   r	   )r   rL   r	   r	   r
   r     s    z9TestFrozenSet.test_hash_effectiveness.<locals>.<listcomp>r&   c                s   g | ]\}}| @ r|qS r	   r	   )r   r   m)rL   r	   r
   r     s    c             S   s<   t  g}x&t| d D ]}t |}|| qW |d |  S )Nr   )r4   rs   r   )r   numsrL   Znumr	   r	   r
   zf_range  s
    z7TestFrozenSet.test_hash_effectiveness.<locals>.zf_rangec             s   s6   x0t t| d D ]}ttt| |E d H  qW d S )Nr   )rs   r1   rh   r4   	itertoolscombinations)r!   rL   r	   r	   r
   powerset  s    z7TestFrozenSet.test_hash_effectiveness.<locals>.powerset   r   c                s   h | ]}| @ qS r	   r	   )r   h)maskr	   r
   	<setcomp>  s    z8TestFrozenSet.test_hash_effectiveness.<locals>.<setcomp>r   )	r*   r   rs   r   r4   r-   r1   rh   ZassertGreater)
r   r   Z
hashvaluesZaddhashvalueZ	elemmasksr  r  ri   r  rG   r	   )rL   r  r
   test_hash_effectiveness  s    "$z%TestFrozenSet.test_hash_effectivenessN)r   r   r   r4   r    rC   r   r   r   r   r   r   r   r
  r	   r	   r	   r
   r     s   	
r   c               @   s   e Zd ZdS )FrozenSetSubclassN)r   r   r   r	   r	   r	   r
   r    s   r  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   s0   |  td}|  |}| t|t| d S )Nrg   )r    rs   rT   rS   )r   r!   ri   r	   r	   r
   r     s    
z/TestFrozenSetSubclass.test_constructor_identityc             C   s$   | j  }| t| j t| d S )N)r!   r   rT   rS   )r   rx   r	   r	   r
   r     s    
zTestFrozenSetSubclass.test_copyc             C   s"   |   }|  |}| || d S )N)r    r-   )r   r!   ri   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	   rO   r   )r    r4   rs   r-   r1   r*   rh   rS   )r   Z	FrozensetrY   Fr   r	   r	   r
   r     s    z4TestFrozenSetSubclass.test_singleton_empty_frozensetN)r   r   r   r  r    r4   rC   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+d, Zd-d. Zd/d0 Zd1S )2TestBasicOpsc             C   s"   | j d k	r| t | j| j  d S )N)r   r-   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
   r   "  s    z:TestBasicOps.check_repr_against_values.<locals>.<listcomp>)	r   r*   r\   
startswithendswithsplitsortvaluesr-   )r   textresultZsorted_repr_valuesr	   r	   r
   check_repr_against_values  s    
z&TestBasicOps.check_repr_against_valuesc          	   C   sf   zJt tjd}|t| j |  t tjd}| | t	| j W d |  t
tj X d S )Nr   rp   )r   r   r   r   rD   r*   r   r-   r   r   r   )r   r   r	   r	   r
   
test_print&  s    zTestBasicOps.test_printc             C   s   |  t| j| j d S )N)r-   r1   r*   length)r   r	   r	   r
   test_length1  s    zTestBasicOps.test_lengthc             C   s   |  | j| j d S )N)r-   r*   )r   r	   r	   r
   test_self_equality4  s    zTestBasicOps.test_self_equalityc             C   s   |  | j| j d S )N)r-   r*   rx   )r   r	   r	   r
   test_equivalent_equality7  s    z%TestBasicOps.test_equivalent_equalityc             C   s   |  | j | j d S )N)r-   r*   r   rx   )r   r	   r	   r
   r   :  s    zTestBasicOps.test_copyc             C   s   | j | j B }| || j d S )N)r*   r-   rx   )r   r  r	   r	   r
   test_self_union=  s    zTestBasicOps.test_self_unionc             C   s   | j tB }| || j d S )N)r*   	empty_setr-   rx   )r   r  r	   r	   r
   test_empty_unionA  s    
zTestBasicOps.test_empty_unionc             C   s   t | jB }| || j d S )N)r"  r*   r-   rx   )r   r  r	   r	   r
   test_union_emptyE  s    
zTestBasicOps.test_union_emptyc             C   s   | j | j @ }| || j d S )N)r*   r-   rx   )r   r  r	   r	   r
   test_self_intersectionI  s    z#TestBasicOps.test_self_intersectionc             C   s   | j t@ }| |t d S )N)r*   r"  r-   )r   r  r	   r	   r
   test_empty_intersectionM  s    
z$TestBasicOps.test_empty_intersectionc             C   s   t | j@ }| |t  d S )N)r"  r*   r-   )r   r  r	   r	   r
   test_intersection_emptyQ  s    
z$TestBasicOps.test_intersection_emptyc             C   s"   | j | j }| || j   d S )N)r*   r[   r-   )r   r  r	   r	   r
   test_self_isdisjointU  s    z!TestBasicOps.test_self_isdisjointc             C   s   | j t}| |d d S )NT)r*   r[   r"  r-   )r   r  r	   r	   r
   test_empty_isdisjointY  s    z"TestBasicOps.test_empty_isdisjointc             C   s   t | j}| |d d S )NT)r"  r[   r*   r-   )r   r  r	   r	   r
   test_isdisjoint_empty]  s    z"TestBasicOps.test_isdisjoint_emptyc             C   s   | j | j A }| |t d S )N)r*   r-   r"  )r   r  r	   r	   r
   test_self_symmetric_differencea  s    z+TestBasicOps.test_self_symmetric_differencec             C   s   | j tA }| || j  d S )N)r*   r"  r-   )r   r  r	   r	   r
   test_empty_symmetric_differencee  s    
z,TestBasicOps.test_empty_symmetric_differencec             C   s   | j | j  }| |t d S )N)r*   r-   r"  )r   r  r	   r	   r
   test_self_differencei  s    z!TestBasicOps.test_self_differencec             C   s   | j t }| || j d S )N)r*   r"  r-   rx   )r   r  r	   r	   r
   test_empty_differencem  s    
z"TestBasicOps.test_empty_differencec             C   s   t | j }| |t  d S )N)r"  r*   r-   )r   r  r	   r	   r
   test_empty_difference_revq  s    
z&TestBasicOps.test_empty_difference_revc             C   sB   x| j D ]}| || j qW t| j }| | t| j  d S )N)r*   r5   r  rz   r-   __length_hint__r1   )r   vZsetiterr	   r	   r
   test_iterationu  s    
zTestBasicOps.test_iterationc             C   sN   xHt tjd D ]6}t| j|}t|}| | j|d| j|f  qW d S )Nr   z%s != %s)rs   rt   ru   rv   r*   rw   r-   )r   r   rn   r   r	   r	   r
   ry   {  s
    

zTestBasicOps.test_picklingc          	   C   sH   |  t t d W d Q R X |  t t d W d Q R X d S )Nr   )r(   r)   r*   r_   r   )r   r	   r	   r
   test_issue_37219  s    zTestBasicOps.test_issue_37219N)r   r   r   r  r  r  r  r  r   r   r!  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r2  ry   r3  r	   r	   r	   r
   r    s0   r  c               @   s   e Zd Zdd ZdS )TestBasicOpsEmptyc             C   s4   d| _ g | _t| j| _t| j| _d| _d| _d S )Nz	empty setr   zset())caser  r*   rx   r  r   )r   r	   r	   r
   r%     s    zTestBasicOpsEmpty.setUpN)r   r   r   r%   r	   r	   r	   r
   r4    s   r4  c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestBasicOpsSingletonc             C   s6   d| _ dg| _t| j| _t| j| _d| _d| _d S )Nzunit set (number)rg   r   z{3})r5  r  r*   rx   r  r   )r   r	   r	   r
   r%     s    zTestBasicOpsSingleton.setUpc             C   s   |  d| j d S )Nrg   )r5   r*   )r   r	   r	   r
   test_in  s    zTestBasicOpsSingleton.test_inc             C   s   |  d| j d S )Nr&   )r   r*   )r   r	   r	   r
   test_not_in  s    z!TestBasicOpsSingleton.test_not_inN)r   r   r   r%   r7  r8  r	   r	   r	   r
   r6    s   r6  c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestBasicOpsTuplec             C   s6   d| _ dg| _t| j| _t| j| _d| _d| _d S )Nzunit set (tuple))r   zeror   z{(0, 'zero')})r5  r  r*   rx   r  r   )r   r	   r	   r
   r%     s    zTestBasicOpsTuple.setUpc             C   s   |  d| j d S )N)r   r:  )r5   r*   )r   r	   r	   r
   r7    s    zTestBasicOpsTuple.test_inc             C   s   |  d| j d S )N	   )r   r*   )r   r	   r	   r
   r8    s    zTestBasicOpsTuple.test_not_inN)r   r   r   r%   r7  r8  r	   r	   r	   r
   r9    s   r9  c               @   s   e Zd Zdd ZdS )TestBasicOpsTriplec             C   s<   d| _ ddtjg| _t| j| _t| j| _d| _d | _d S )Nz
triple setr   r:  rg   )r5  operatorr   r  r*   rx   r  r   )r   r	   r	   r
   r%     s    zTestBasicOpsTriple.setUpN)r   r   r   r%   r	   r	   r	   r
   r<    s   r<  c               @   s   e Zd Zdd Zdd ZdS )TestBasicOpsStringc             C   s4   d| _ dddg| _t| j| _t| j| _d| _d S )Nz
string setr'   rQ   r6   rg   )r5  r  r*   rx   r  )r   r	   r	   r
   r%     s
    zTestBasicOpsString.setUpc             C   s   |    d S )N)r  )r   r	   r	   r
   r    s    zTestBasicOpsString.test_reprN)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S )TestBasicOpsBytesc             C   s4   d| _ dddg| _t| j| _t| j| _d| _d S )Nz	bytes set   a   b   crg   )r5  r  r*   rx   r  )r   r	   r	   r
   r%     s
    zTestBasicOpsBytes.setUpc             C   s   |    d S )N)r  )r   r	   r	   r
   r    s    zTestBasicOpsBytes.test_reprN)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S )TestBasicOpsMixedStringBytesc             C   sV   t  | _| j  tdt d| _ddddg| _t	| j| _	t	| j| _
d| _d S )Nignorezstring and bytes setr'   rQ   r@  rA  r   )r   Zcheck_warnings_warning_filters	__enter__warningssimplefilterBytesWarningr5  r  r*   rx   r  )r   r	   r	   r
   r%     s    

z"TestBasicOpsMixedStringBytes.setUpc             C   s   | j d d d  d S )N)rE  __exit__)r   r	   r	   r
   tearDown  s    z%TestBasicOpsMixedStringBytes.tearDownc             C   s   |    d S )N)r  )r   r	   r	   r
   r    s    z&TestBasicOpsMixedStringBytes.test_reprN)r   r   r   r%   rK  r  r	   r	   r	   r
   rC    s   
rC  c               c   s   t dV  d S )NT)r)   r	   r	   r	   r
   baditer  s    rL  c               c   s
   dV  d S )NTr	   r	   r	   r	   r
   gooditer  s    rM  c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestExceptionPropagationc             C   s   |  ttt  d S )N)r(   r)   r*   rL  )r   r	   r	   r
   test_instanceWithException  s    z3TestExceptionPropagation.test_instanceWithExceptionc             C   sH   t dddg t d t dddd t td t d t t  d S )Nr   r&   rg   )r   r&   rg   )ZoneZtwoZthreer>   )r*   rs   rM  )r   r	   r	   r
   test_instancesWithoutException  s    z7TestExceptionPropagation.test_instancesWithoutExceptionc             C   sP   t dddg}yx|D ]}|dg qW W n tk
r@   Y nX | d d S )Nr   r&   rg   r   z0no exception when changing size during iteration)r*   r   r   rK   )r   r!   rL   r	   r	   r
   test_changingSizeWhileIterating  s    
z8TestExceptionPropagation.test_changingSizeWhileIteratingN)r   r   r   rO  rP  rQ  r	   r	   r	   r
   rN    s   	rN  c               @   s   e Zd Zdd ZdS )TestSetOfSetsc             C   s\   t dg}t|g}| }| t|t  || || | |t  || d S )Nr   )r4   r*   r   r-   rB   r   r   r   )r   innerZouterZelementr	   r	   r
   test_constructor  s    



zTestSetOfSets.test_constructorN)r   r   r   rT  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%S )&TestBinaryOpsc             C   s   t d| _ d S )N)r&   r      )r*   )r   r	   r	   r
   r%     s    zTestBinaryOps.setUpc             C   s   |  | jtdddd d S )Nr   rg      )r&   r   rV  )r-   r*   )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   rV  )r*   r-   )r   r  r	   r	   r
   test_union_subset%  s    zTestBinaryOps.test_union_subsetc             C   s2   | j t ddddgB }| |t ddddg d S )Nr&   r   rV     )r*   r-   )r   r  r	   r	   r
   test_union_superset)  s    z!TestBinaryOps.test_union_supersetc          	   C   s2   | j t dddgB }| |t dddddg d S )Nrg   r   rW  r&   rV  )r*   r-   )r   r  r	   r	   r
   test_union_overlap-  s    z TestBinaryOps.test_union_overlapc             C   s,   | j t dgB }| |t ddddg d S )NrZ  r&   r   rV  )r*   r-   )r   r  r	   r	   r
   test_union_non_overlap1  s    z$TestBinaryOps.test_union_non_overlapc             C   s"   | j t d@ }| |t d d S )N)r&   r   )r*   r-   )r   r  r	   r	   r
   test_intersection_subset5  s    z&TestBinaryOps.test_intersection_subsetc             C   s0   | j t ddddg@ }| |t dddg d S )Nr&   r   rV  rZ  )r*   r-   )r   r  r	   r	   r
   test_intersection_superset9  s    z(TestBinaryOps.test_intersection_supersetc             C   s*   | j t dddg@ }| |t dg d S )Nrg   r   rW  )r*   r-   )r   r  r	   r	   r
   test_intersection_overlap=  s    z'TestBinaryOps.test_intersection_overlapc             C   s    | j t dg@ }| |t d S )NrZ  )r*   r-   r"  )r   r  r	   r	   r
   test_intersection_non_overlapA  s    z+TestBinaryOps.test_intersection_non_overlapc             C   s    | j t d}| |d d S )N)r&   r   F)r*   r[   r-   )r   r  r	   r	   r
   test_isdisjoint_subsetE  s    z$TestBinaryOps.test_isdisjoint_subsetc             C   s(   | j t ddddg}| |d d S )Nr&   r   rV  rZ  F)r*   r[   r-   )r   r  r	   r	   r
   test_isdisjoint_supersetI  s    z&TestBinaryOps.test_isdisjoint_supersetc             C   s&   | j t dddg}| |d d S )Nrg   r   rW  F)r*   r[   r-   )r   r  r	   r	   r
   test_isdisjoint_overlapM  s    z%TestBinaryOps.test_isdisjoint_overlapc             C   s"   | j t dg}| |d d S )NrZ  T)r*   r[   r-   )r   r  r	   r	   r
   test_isdisjoint_non_overlapQ  s    z)TestBinaryOps.test_isdisjoint_non_overlapc             C   s$   | j t dA }| |t dg d S )N)r&   r   rV  )r*   r-   )r   r  r	   r	   r
   test_sym_difference_subsetU  s    z(TestBinaryOps.test_sym_difference_subsetc             C   s$   | j t dA }| |t dg d S )N)r&   r   rV  rZ  rZ  )r*   r-   )r   r  r	   r	   r
   test_sym_difference_supersetY  s    z*TestBinaryOps.test_sym_difference_supersetc             C   s*   | j t dA }| |t ddddg d S )N)rg   r   rW  r&   rg   rW  rV  )r*   r-   )r   r  r	   r	   r
   test_sym_difference_overlap]  s    z)TestBinaryOps.test_sym_difference_overlapc             C   s,   | j t dgA }| |t ddddg d S )NrZ  r&   r   rV  )r*   r-   )r   r  r	   r	   r
   test_sym_difference_non_overlapa  s    z-TestBinaryOps.test_sym_difference_non_overlapN)r   r   r   r%   rX  rY  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  r	   r	   r	   r
   rU    s$   rU  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   s   t d| _ d S )N)r&   r   rV  )r*   )r   r	   r	   r
   r%   h  s    zTestUpdateOps.setUpc             C   s*   |  j t dgO  _ | | j t d d S )Nr&   )r&   r   rV  )r*   r-   )r   r	   r	   r
   rY  k  s    zTestUpdateOps.test_union_subsetc             C   s8   |  j t ddddgO  _ | | j t ddddg d S )Nr&   r   rV  rZ  )r*   r-   )r   r	   r	   r
   r[  o  s    z!TestUpdateOps.test_union_supersetc          	   C   s8   |  j t dddgO  _ | | j t dddddg d S )Nrg   r   rW  r&   rV  )r*   r-   )r   r	   r	   r
   r\  s  s    z TestUpdateOps.test_union_overlapc             C   s2   |  j t dgO  _ | | j t ddddg d S )NrZ  r&   r   rV  )r*   r-   )r   r	   r	   r
   r]  w  s    z$TestUpdateOps.test_union_non_overlapc          	   C   s6   | j t dddg | | j t dddddg d S )Nrg   r   rW  r&   rV  )r*   r   r-   )r   r	   r	   r
   test_union_method_call{  s    z$TestUpdateOps.test_union_method_callc             C   s(   |  j t dM  _ | | j t d d S )N)r&   r   )r*   r-   )r   r	   r	   r
   r^    s    z&TestUpdateOps.test_intersection_subsetc             C   s6   |  j t ddddgM  _ | | j t dddg d S )Nr&   r   rV  rZ  )r*   r-   )r   r	   r	   r
   r_    s    z(TestUpdateOps.test_intersection_supersetc             C   s0   |  j t dddgM  _ | | j t dg d S )Nrg   r   rW  )r*   r-   )r   r	   r	   r
   r`    s    z'TestUpdateOps.test_intersection_overlapc             C   s&   |  j t dgM  _ | | j t d S )NrZ  )r*   r-   r"  )r   r	   r	   r
   ra    s    z+TestUpdateOps.test_intersection_non_overlapc             C   s.   | j t dddg | | j t dg d S )Nrg   r   rW  )r*   r   r-   )r   r	   r	   r
   test_intersection_method_call  s    z+TestUpdateOps.test_intersection_method_callc             C   s*   |  j t dN  _ | | j t dg d S )N)r&   r   rV  )r*   r-   )r   r	   r	   r
   rf    s    z(TestUpdateOps.test_sym_difference_subsetc             C   s*   |  j t dN  _ | | j t dg d S )N)r&   r   rV  rZ  rZ  )r*   r-   )r   r	   r	   r
   rg    s    z*TestUpdateOps.test_sym_difference_supersetc             C   s0   |  j t dN  _ | | j t ddddg d S )N)rg   r   rW  r&   rg   rW  rV  )r*   r-   )r   r	   r	   r
   rh    s    z)TestUpdateOps.test_sym_difference_overlapc             C   s2   |  j t dgN  _ | | j t ddddg d S )NrZ  r&   r   rV  )r*   r-   )r   r	   r	   r
   ri    s    z-TestUpdateOps.test_sym_difference_non_overlapc             C   s4   | j t dddg | | j t ddddg d S )Nrg   r   rW  r&   rV  )r*   r   r-   )r   r	   r	   r
   test_sym_difference_method_call  s    z-TestUpdateOps.test_sym_difference_method_callc             C   s*   |  j t d8  _ | | j t dg d S )N)r&   r   rV  )r*   r-   )r   r	   r	   r
   test_difference_subset  s    z$TestUpdateOps.test_difference_subsetc             C   s(   |  j t d8  _ | | j t g  d S )N)r&   r   rV  rZ  )r*   r-   )r   r	   r	   r
   test_difference_superset  s    z&TestUpdateOps.test_difference_supersetc             C   s,   |  j t d8  _ | | j t ddg d S )N)rg   r   rW  r&   rV  )r*   r-   )r   r	   r	   r
   test_difference_overlap  s    z%TestUpdateOps.test_difference_overlapc             C   s0   |  j t dg8  _ | | j t dddg d S )NrZ  r&   r   rV  )r*   r-   )r   r	   r	   r
   test_difference_non_overlap  s    z)TestUpdateOps.test_difference_non_overlapc             C   s0   | j t dddg | | j t ddg d S )Nrg   r   rW  r&   rV  )r*   r   r-   )r   r	   r	   r
   test_difference_method_call  s    z)TestUpdateOps.test_difference_method_callN)r   r   r   r%   rY  r[  r\  r]  rk  r^  r_  r`  ra  rl  rf  rg  rh  ri  rm  rn  ro  rp  rq  rr  r	   r	   r	   r
   rj  g  s*   rj  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S )
TestMutatec             C   s   dddg| _ t| j | _d S )Nr'   rQ   r6   )r  r*   )r   r	   r	   r
   r%     s    zTestMutate.setUpc             C   s"   | j d | | j t d d S )Nr6   r>   )r*   r   r-   )r   r	   r	   r
   test_add_present  s    zTestMutate.test_add_presentc             C   s"   | j d | | j t d d S )Nr$   r:   )r*   r   r-   )r   r	   r	   r
   test_add_absent  s    zTestMutate.test_add_absentc             C   sN   t  }d}x0| jD ]&}|| |d7 }| t|| qW | || j  d S )Nr   r   )r*   r  r   r-   r1   )r   Ztmpexpected_lenr1  r	   r	   r
   test_add_until_full  s    
zTestMutate.test_add_until_fullc             C   s"   | j d | | j t d d S )NrQ   Zac)r*   r   r-   )r   r	   r	   r
   test_remove_present  s    zTestMutate.test_remove_presentc             C   s4   y| j d | d W n tk
r.   Y nX d S )Nr$   z7Removing missing element should have raised LookupError)r*   r   rK   LookupError)r   r	   r	   r
   test_remove_absent  s
    zTestMutate.test_remove_absentc             C   sD   t | j}x4| jD ]*}| j| |d8 }| t | j| qW d S )Nr   )r1   r*   r  r   r-   )r   rv  r1  r	   r	   r
   test_remove_until_empty  s
    
z"TestMutate.test_remove_until_emptyc             C   s"   | j d | | j t d d S )Nr6   rZ   )r*   r   r-   )r   r	   r	   r
   test_discard_present  s    zTestMutate.test_discard_presentc             C   s"   | j d | | j t d d S )Nr$   r>   )r*   r   r-   )r   r	   r	   r
   test_discard_absent  s    zTestMutate.test_discard_absentc             C   s    | j   | t| j d d S )Nr   )r*   r   r-   r1   )r   r	   r	   r
   r     s    
zTestMutate.test_clearc             C   sT   i }x| j rd || j  < qW | t|t| j x| jD ]}| || q<W d S )N)r*   r   r-   r1   r  r5   )r   Zpoppedr1  r	   r	   r
   r     s    zTestMutate.test_popc             C   s$   | j d | | j t | j d S )Nr	   )r*   r   r-   r  )r   r	   r	   r
   test_update_empty_tuple  s    z"TestMutate.test_update_empty_tuplec             C   s$   | j d | | j t | j d S )N)r'   )r*   r   r-   r  )r   r	   r	   r
   test_update_unit_tuple_overlap  s    z)TestMutate.test_update_unit_tuple_overlapc             C   s*   | j d | | j t | jdg  d S )N)r'   rU   rU   )r*   r   r-   r  )r   r	   r	   r
   "test_update_unit_tuple_non_overlap  s    z-TestMutate.test_update_unit_tuple_non_overlapN)r   r   r   r%   rt  ru  rw  rx  rz  r{  r|  r}  r   r   r~  r  r  r	   r	   r	   r
   rs    s   	rs  c               @   s0   e Zd ZdddZdddddd	d
Zdd ZdS )TestSubsetsrl   rm   )z<=z>=z==z!=><z>=z<=)z==z!=r  r  z<=z>=c             C   s   | j }| j}xdD ]}|| jk}td| d t }| || |tjkrnt|tj| }||}| || tj	| }td| d t }| || |tjkrt|tj| }||}| || qW d S )N)z!=z==r  z<=r  z>=rI   y)
leftrightcasesevallocalsr-   r  case2methodgetattrreverse)r   rI   r  r5  r/   r  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)z==z<=z>=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 pair)z==z<=z>=N)r   r   r   r*   r  r  r   r  r	   r	   r	   r
   r  5  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)z!=r  z<=N)r   r   r   r*   r  r  r   r  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 other)z!=r  z<=N)r   r   r   r*   r  r  r   r  r	   r	   r	   r
   r  E  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 containsz!=N)r   r   r   r*   r  r  r   r  r	   r	   r	   r
   r  M  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S )TestOnlySetsInBinaryOpsc             C   sT   |  | j| jkd |  | j| jkd |  | j| jkd |  | j| jkd d S )NFT)r-   r   r*   )r   r	   r	   r
   
test_eq_neW  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                  s    j  jk S )N)r*   r   r	   )r   r	   r
   <lambda>_      z:TestOnlySetsInBinaryOps.test_ge_gt_le_lt.<locals>.<lambda>c                  s    j  jkS )N)r*   r   r	   )r   r	   r
   r  `  r  c                  s    j  jkS )N)r*   r   r	   )r   r	   r
   r  a  r  c                  s    j  jkS )N)r*   r   r	   )r   r	   r
   r  b  r  c                  s    j  jk S )N)r   r*   r	   )r   r	   r
   r  d  r  c                  s    j  jkS )N)r   r*   r	   )r   r	   r
   r  e  r  c                  s    j  jkS )N)r   r*   r	   )r   r	   r
   r  f  r  c                  s    j  jkS )N)r   r*   r	   )r   r	   r
   r  g  r  )r(   r)   )r   r	   )r   r
   test_ge_gt_le_lt^  s    z(TestOnlySetsInBinaryOps.test_ge_gt_le_ltc             C   s8   y|  j | jO  _ W n tk
r(   Y nX | d d S )Nzexpected TypeError)r*   r   r)   rK   )r   r	   r	   r
   test_update_operatori  s
    z,TestOnlySetsInBinaryOps.test_update_operatorc             C   s.   | j r| j| j n| t| jj| j d S )N)otherIsIterabler*   r   r   r(   r)   )r   r	   r	   r
   r   q  s    z#TestOnlySetsInBinaryOps.test_updatec                sV     t fdd   t fdd  jr> j j n  t jj j d S )Nc                  s    j  jB S )N)r*   r   r	   )r   r	   r
   r  x  r  z4TestOnlySetsInBinaryOps.test_union.<locals>.<lambda>c                  s    j  jB S )N)r   r*   r	   )r   r	   r
   r  y  r  )r(   r)   r  r*   rA   r   )r   r	   )r   r
   rJ   w  s
    z"TestOnlySetsInBinaryOps.test_unionc             C   s8   y|  j | jM  _ W n tk
r(   Y nX | d d S )Nzexpected TypeError)r*   r   r)   rK   )r   r	   r	   r
   !test_intersection_update_operator  s
    z9TestOnlySetsInBinaryOps.test_intersection_update_operatorc             C   s.   | j r| j| j n| t| jj| j d S )N)r  r*   r   r   r(   r)   )r   r	   r	   r
   r     s
    z0TestOnlySetsInBinaryOps.test_intersection_updatec                sV     t fdd   t fdd  jr> j j n  t jj j d S )Nc                  s    j  j@ S )N)r*   r   r	   )r   r	   r
   r    r  z;TestOnlySetsInBinaryOps.test_intersection.<locals>.<lambda>c                  s    j  j@ S )N)r   r*   r	   )r   r	   r
   r    r  )r(   r)   r  r*   rR   r   )r   r	   )r   r
   rV     s
    z)TestOnlySetsInBinaryOps.test_intersectionc             C   s8   y|  j | jN  _ W n tk
r(   Y nX | d d S )Nzexpected TypeError)r*   r   r)   rK   )r   r	   r	   r
   #test_sym_difference_update_operator  s
    z;TestOnlySetsInBinaryOps.test_sym_difference_update_operatorc             C   s.   | j r| j| j n| t| jj| j d S )N)r  r*   r   r   r(   r)   )r   r	   r	   r
   test_sym_difference_update  s
    z2TestOnlySetsInBinaryOps.test_sym_difference_updatec                sV     t fdd   t fdd  jr> j j n  t jj j d S )Nc                  s    j  jA S )N)r*   r   r	   )r   r	   r
   r    r  z=TestOnlySetsInBinaryOps.test_sym_difference.<locals>.<lambda>c                  s    j  jA S )N)r   r*   r	   )r   r	   r
   r    r  )r(   r)   r  r*   rc   r   )r   r	   )r   r
   test_sym_difference  s
    z+TestOnlySetsInBinaryOps.test_sym_differencec             C   s8   y|  j | j8  _ W n tk
r(   Y nX | d d S )Nzexpected TypeError)r*   r   r)   rK   )r   r	   r	   r
   test_difference_update_operator  s
    z7TestOnlySetsInBinaryOps.test_difference_update_operatorc             C   s.   | j r| j| j n| t| jj| j d S )N)r  r*   r   r   r(   r)   )r   r	   r	   r
   r     s
    z.TestOnlySetsInBinaryOps.test_difference_updatec                sV     t fdd   t fdd  jr> j j n  t jj j d S )Nc                  s    j  j S )N)r*   r   r	   )r   r	   r
   r    r  z9TestOnlySetsInBinaryOps.test_difference.<locals>.<lambda>c                  s    j  j S )N)r   r*   r	   )r   r	   r
   r    r  )r(   r)   r  r*   r_   r   )r   r	   )r   r
   r`     s
    z'TestOnlySetsInBinaryOps.test_differenceN)r   r   r   r  r  r  r   rJ   r  r   rV   r  r  r  r  r   r`   r	   r	   r	   r
   r  U  s   r  c               @   s   e Zd Zdd ZdS )TestOnlySetsNumericc             C   s   t d| _ d| _d| _d S )N)r   r&   rg      F)r*   r   r  )r   r	   r	   r
   r%     s    
zTestOnlySetsNumeric.setUpN)r   r   r   r%   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd ZdS )TestOnlySetsDictc             C   s    t d| _ ddd| _d| _d S )N)r   r&   rg   r&   r   )r   rg   T)r*   r   r  )r   r	   r	   r
   r%     s    
zTestOnlySetsDict.setUpN)r   r   r   r%   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd ZdS )TestOnlySetsOperatorc             C   s   t d| _ tj| _d| _d S )N)r   r&   rg   F)r*   r=  r   r   r  )r   r	   r	   r
   r%     s    
zTestOnlySetsOperator.setUpN)r   r   r   r%   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd ZdS )TestOnlySetsTuplec             C   s   t d| _ d| _d| _d S )N)r   r&   rg   )r&   r   rV  T)r*   r   r  )r   r	   r	   r
   r%     s    
zTestOnlySetsTuple.setUpN)r   r   r   r%   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd ZdS )TestOnlySetsStringc             C   s   t d| _ d| _d| _d S )N)r   r&   rg   r>   T)r*   r   r  )r   r	   r	   r
   r%     s    
zTestOnlySetsString.setUpN)r   r   r   r%   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd ZdS )TestOnlySetsGeneratorc             C   s$   dd }t d| _ | | _d| _d S )Nc              s   s    xt dddD ]
} | V  qW d S )Nr   rr   r&   )rs   )rL   r	   r	   r
   gen  s    z(TestOnlySetsGenerator.setUp.<locals>.gen)r   r&   rg   T)r*   r   r  )r   r  r	   r	   r
   r%     s    
zTestOnlySetsGenerator.setUpN)r   r   r   r%   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd Zdd ZdS )TestCopyingc             C   sh   | j  }t|td}t| j td}| t|t| x*tt|D ]}| || || k qFW d S )N)r   )r*   r   r,   r   r-   r1   rs   r\   )r   rx   dup_listset_listrL   r	   r	   r
   r     s    
zTestCopying.test_copyc             C   sh   t | j}t|td}t| jtd}| t|t| x(tt|D ]}| || ||  qHW d S )N)r   )r   r   r*   r,   r   r-   r1   rs   )r   rx   r  r  rL   r	   r	   r
   test_deep_copy  s    zTestCopying.test_deep_copyN)r   r   r   r   r  r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd ZdS )TestCopyingEmptyc             C   s   t  | _ d S )N)r*   )r   r	   r	   r
   r%     s    zTestCopyingEmpty.setUpN)r   r   r   r%   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd ZdS )TestCopyingSingletonc             C   s   t dg| _ d S )NZhello)r*   )r   r	   r	   r
   r%     s    zTestCopyingSingleton.setUpN)r   r   r   r%   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd ZdS )TestCopyingTriplec             C   s   t ddd g| _ d S )Nr:  r   )r*   )r   r	   r	   r
   r%     s    zTestCopyingTriple.setUpN)r   r   r   r%   r	   r	   r	   r
   r    s   r  c               @   s   e Zd Zdd ZdS )TestCopyingTuplec             C   s   t dg| _ d S )N)r   r&   )r*   )r   r	   r	   r
   r%   $  s    zTestCopyingTuple.setUpN)r   r   r   r%   r	   r	   r	   r
   r  #  s   r  c               @   s   e Zd Zdd ZdS )TestCopyingNestedc             C   s   t dg| _ d S )N))r   r&   )rg   r   )r*   )r   r	   r	   r
   r%   *  s    zTestCopyingNested.setUpN)r   r   r   r%   r	   r	   r	   r
   r  )  s   r  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'   rQ   )r   r	   r	   r
   r%   0  s    
zTestIdentities.setUpc             C   s   | j | j }}| || |k  | || |k  | ||@ |k  | ||@ |k  | ||B |k | ||B |k | ||A ||B k  d S )N)r'   rQ   r\   )r   r'   rQ   r	   r	   r
   test_binopsVsSubsets4  s    z#TestIdentities.test_binopsVsSubsetsc             C   sj   | j | j }}| ||@ ||@  | ||B ||B  | ||A ||A  ||krf| || ||  d S )N)r'   rQ   r-   rT   )r   r'   rQ   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 )N)r'   rQ   r-   )r   r'   rQ   r	   r	   r
   test_summationsF  s    $zTestIdentities.test_summationsc             C   sZ   | j | jt   }}}| || |@ | | || |@ | | ||@ ||A @ | d S )N)r'   rQ   r*   r-   )r   r'   rQ   r:  r	   r	   r
   test_exclusionQ  s    zTestIdentities.test_exclusionN)r   r   r   r%   r  r  r  r  r	   r	   r	   r
   r  /  s
   
r  c             c   s   x| D ]
}|V  qW d S )Nr	   )seqnrL   r	   r	   r
   RZ  s    
r  c               @   s   e Zd Zdd Zdd ZdS )Gc             C   s
   || _ d S )N)r  )r   r  r	   r	   r
   r   a  s    z
G.__init__c             C   s
   | j | S )N)r  )r   rL   r	   r	   r
   __getitem__c  s    zG.__getitem__N)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S )Ic             C   s   || _ d| _d S )Nr   )r  rL   )r   r  r	   r	   r
   r   h  s    z
I.__init__c             C   s   | S )Nr	   )r   r	   r	   r
   __iter__k  s    z
I.__iter__c             C   s2   | j t| jkrt| j| j  }|  j d7  _ |S )Nr   )rL   r1   r  r~   )r   r1  r	   r	   r
   __next__m  s
     z
I.__next__N)r   r   r   r   r  r  r	   r	   r	   r
   r  f  s   r  c               @   s   e Zd Zdd Zdd ZdS )Igc             C   s   || _ d| _d S )Nr   )r  rL   )r   r  r	   r	   r
   r   u  s    zIg.__init__c             c   s   x| j D ]
}|V  qW d S )N)r  )r   valr	   r	   r
   r  x  s    zIg.__iter__N)r   r   r   r   r  r	   r	   r	   r
   r  s  s   r  c               @   s   e Zd Zdd Zdd ZdS )Xc             C   s   || _ d| _d S )Nr   )r  rL   )r   r  r	   r	   r
   r   ~  s    z
X.__init__c             C   s2   | j t| jkrt| j| j  }|  j d7  _ |S )Nr   )rL   r1   r  r~   )r   r1  r	   r	   r
   r    s
     z
X.__next__N)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S )Nc             C   s   || _ d| _d S )Nr   )r  rL   )r   r  r	   r	   r
   r     s    z
N.__init__c             C   s   | S )Nr	   )r   r	   r	   r
   r    s    z
N.__iter__N)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S )Ec             C   s   || _ d| _d S )Nr   )r  rL   )r   r  r	   r	   r
   r     s    z
E.__init__c             C   s   | S )Nr	   )r   r	   r	   r
   r    s    z
E.__iter__c             C   s   dd  d S )Nrg   r   r	   )r   r	   r	   r
   r    s    z
E.__next__N)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S )Sc             C   s   d S )Nr	   )r   r  r	   r	   r
   r     s    z
S.__init__c             C   s   | S )Nr	   )r   r	   r	   r
   r    s    z
S.__iter__c             C   s   t d S )N)r~   )r   r	   r	   r
   r    s    z
S.__next__N)r   r   r   r   r  r  r	   r	   r	   r
   r    s   r  )chainc             C   s   t tdd ttt| S )Nc             S   s   | S )Nr	   )rI   r	   r	   r
   r    r  zL.<locals>.<lambda>)r  rh   r  r  r  )r  r	   r	   r
   L  s    r  c               @   s$   e Zd Zdd Zdd Zdd ZdS )TestVariousIteratorArgsc          
   C   s   xt tfD ]}xddtddtdddfD ]|}x@ttttttfD ],}| 	t
|||tdt
||td q@W | t|t| | t|t| | t|t| q*W q
W d S )	N123rO   i  )dog333333?i  i  rW  )r   )r*   r4   rs   r  r  r  r  r  r  r-   r,   r   r(   r)   r  r  ZeroDivisionErrorr  )r   Zconsr!   gr	   r	   r
   rT    s     ,z(TestVariousIteratorArgs.test_constructorc          
   C   s   t d}xddtddtdddd	fD ]}x|j|j|j|j|jfD ]}x^ttt	t
tfD ]L}||}|||}t|tr| || qX| t|td
t|td
 qXW | t|t| | t|t| | t|t| qDW q&W d S )NZnovemberr  rO   i  )r  g333333?i  i  rW  december)r   )r*   rs   rA   rR   r_   rc   r[   r  r  r  r  r  
isinstanceboolr-   r,   r   r(   r)   r  r  r  r  )r   r!   r   Zmethr  r/   r.   r	   r	   r
   test_inline_methods  s    "
 z+TestVariousIteratorArgs.test_inline_methodsc          
   C   s   xddt ddt ddddfD ]}xd	D ]}xlttttttfD ]X}td
}| }t	||t
|| t	|||| | t|tdt|td q>W | tt	td
|t| | tt	td
|t| | tt	td
|t| q(W qW d S )Nr  rO   i  )r  g333333?i  i  rW  r  )r   r   r   r   Zjanuary)r   )rs   r  r  r  r  r  r  r*   r   r  rE   r-   r,   r   r(   r)   r  r  r  r  )r   r   Zmethnamer  r!   ri   r	   r	   r
   test_inplace_methods  s    "
 z,TestVariousIteratorArgs.test_inplace_methodsN)r   r   r   rT  r  r  r	   r	   r	   r
   r    s   	r  c               @   s   e Zd Zdd Zdd ZdS )bad_eqc             C   s   t rt  t| |kS )N)be_badset2r   r  )r   r   r	   r	   r
   r     s    zbad_eq.__eq__c             C   s   dS )Nr   r	   )r   r	   r	   r
   r     s    zbad_eq.__hash__N)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S )bad_dict_clearc             C   s   t rt  | |kS )N)r  dict2r   )r   r   r	   r	   r
   r     s    zbad_dict_clear.__eq__c             C   s   dS )Nr   r	   )r   r	   r	   r
   r     s    zbad_dict_clear.__hash__N)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S )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   rL   r	   r	   r
   r	    s    z4TestWeirdBugs.test_8420_set_merge.<locals>.<setcomp>K   T)
r  r  rs   r  r(   r  r   r  r  r   )r   Z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 )Nr   )r*   rs   r   r   rz   rE   )r   r!   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   s   t dS )Nr   )r   )r   r	   r	   r
   r     s    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__N)r   r   r   r   r   r	   )r   r	   r
   r    s   r  c                s   h | ]
}  qS r	   r	   )r   rL   )r  r	   r
   r	    s    z6TestWeirdBugs.test_merge_and_mutate.<locals>.<setcomp>rr   r   )r*   rs   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             c   s^   t | } y4tt| g}x t| D ]}|V  ||B V  q"W W n tk
rX   t V  Y nX d S )N)rz   r4   r}   r  r~   )UrI   r  r	   r	   r
   r    s    r  c                s0   dd t | D  t fddtt | D S )Nc             S   s   g | ]}t |gqS r	   )r4   )r   rI   r	   r	   r
   r     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   r!   )rI   r	   r
   r     s    z#cube.<locals>.<listcomp>.<listcomp>)r4   )r   )
singletons)rI   r
   r     s   )rs   r"   r  )r   r	   )r  r
   cube  s    r  c                sp   i }xf| D ]^ xX|   D ]L fdd|   D } fdd|  D }t || |t  g< qW q
W |S )Nc                s    g | ]}|krt  |gqS r	   )r4   )r   rU   )rI   r  r	   r
   r   #  s    zlinegraph.<locals>.<listcomp>c                s    g | ]}| krt |gqS r	   )r4   )r   rU   )rI   r  r	   r
   r   $  s    )r4   )r  r  Znxnyr	   )rI   r  r
   	linegraph  s    
 r  c             C   s   t  }x|  D ]\}}x|D ]}x| | D ]}||kr:q,|| | kr\|t|||g q,x| | D ]z}||krtqf|| | kr|t||||g qfxF| | D ]:}||ks||krq|| | kr|t|||||g qW qfW q,W qW qW |S )N)r*   itemsr   r4   )r  rY   r   edgesr   Zv3Zv4Zv5r	   r	   r
   faces(  s&    
,r  c               @   s   e Zd Zdd Zdd ZdS )
TestGraphsc             C   s   t d}t|}| t|d x | D ]}| t|d q*W tdd | D }| || t|}| t|d x|D ]}| t|d qW d S )Nrg   rZ  c             s   s   | ]}|D ]
}|V  q
qd S )Nr	   )r   r  r1  r	   r	   r
   r   K  s    z'TestGraphs.test_cube.<locals>.<genexpr>rV  r   )r  r*   r-   r1   r  r  )r   r  Z	vertices1edgeZ	vertices2Z	cubefacesfacer	   r	   r
   	test_cubeD  s    
zTestGraphs.test_cubec             C   s   t d}t|}| t|d t|}x | D ]}| t|d q2W tdd | D }| || t|}tt	}x |D ]}|t|  d7  < qW | |d d | |d d x:|D ]2}	|	}
| t|
d	 x|
D ]}| 
|| qW qW d S )
Nrg      r   c             s   s   | ]}|D ]
}|V  q
qd S )Nr	   )r   r  r  r	   r	   r
   r   `  s    z0TestGraphs.test_cuboctahedron.<locals>.<genexpr>r   rZ  rV  r&   )r  r  r-   r1   r*   r  r  r{   defaultdictr   r5   )r   r  ZcuboctahedronZverticesr  ZotherverticesZ	cubofacesZ	facesizesr  Zvertexr  Zcubevertr	   r	   r
   test_cuboctahedronS  s&    



zTestGraphs.test_cuboctahedronN)r   r   r   r  r  r	   r	   r	   r
   r  B  s   r  __main__)[r   Ztestr   r   r   r=  r   rt   Zrandomr   r   rG  r{   Zcollections.abcr  	Exceptionr   r   r   r   r   r   r   ZTestCaser   r*   r   r   r   r   r   r4   r  r  r"  r  r4  r6  r9  r<  r>  r?  rC  rL  rM  rN  rR  rU  rj  rs  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   mainr	   r	   r	   r
   <module>   s     J  RuIVJ&t+	
	)	*1
