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Zdd ZdS )ReprWrapperz*Used to test self-referential repr() callsc             C   s
   t | jS )N)reprvalue)r   r	   r	   r
   __repr__   s    zReprWrapper.__repr__N)r   r   r   __doc__r   r	   r	   r	   r
   r      s   r   c               @   s    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__"   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
   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+   r5   r#   r$   strlisttuple)r   ur7   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"   rB   r   r.   r+   r5   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 )Nr9   r:   ccr<    r>   bcr@   ZcbcfZbagb)r"   intersectionr   r    r.   r%   r!   r   rC   rD   r)   r   r   r+   r5   r#   r$   rE   rF   rG   idassertNotEqual)r   rM   r7   rI   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 )z&Pure python equivalent of isdisjoint())r+   rS   )s1s2r	   r	   r
   fz   s    z'TestJointOps.test_isdisjoint.<locals>.f)
rP   r(   abr?   Zababacr:   rO   r<   r>   r@   TF)r!   r+   r5   r#   r$   rE   rF   rG   
isdisjointr.   
assertTrue)	r   rZ   ZlargrX   ZrargrI   rY   r/   r0   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"   rS   r   r.   r+   r5   r*   rL   )r   rM   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 )Nr9   r:   r[   r<   r?   r>   r(   r@   rR   r7   )r"   
differencer   r    r.   r%   r!   r   rC   rD   r)   r   r   r*   r+   r5   r#   r$   rE   rF   rG   )r   rM   r7   rI   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+   r5   r*   rL   )r   rM   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 )
Nr9   r:   abdr<   r=   r>   r(   r@   rA   )r"   symmetric_differencer   r    r.   r%   r!   r   rC   rD   r)   r   r   r*   r+   r5   r#   r$   rE   rF   rG   )r   rM   r7   rI   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"   rd   r   r.   r+   r5   r*   rL   )r   rM   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   r5   rU   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   )mapr5   r!   r.   r2   )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 )Nr[   Zabcdedefr(   r?   Zcbs)ri   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.   rC   r+   r5   rJ   )r   rM   ro   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   )rt   ru   rv   iterr"   r!   rw   rx   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   rs   r   )r!   copydeepcopyrU   rT   r.   r   )r   rj   r"   ry   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	   ).0rM   )r   r	   r
   	<genexpr>  s    z'TestJointOps.test_gc.<locals>.<genexpr>i  )r+   rt   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   rT   )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+   addr6   removediscard)r   r   r"   rZ   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   r4   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   rq   )r   r!   r   openr   TESTFNwriterE   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 )Nrs   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$   ri   r   rt   r.   sumr!   r`   r   r   r+   r5   )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
   rI   c  s   rI   r   zCycle was not collected)	objectweakrefrefr+   r{   rJ   gcZcollectr]   )r   rI   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_iteratingr{   r!   )r   r	   r	   r
   test_free_after_iteratingm  s    z&TestJointOps.test_free_after_iteratingN)r   r   r   r&   r,   r1   r3   r8   rK   rN   rW   r^   r_   ra   rb   re   rf   rg   rk   rr   rz   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 )Nrh   )r!   rt   rU   rT   )r   r"   rj   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'   rh   )r+   r.   )r   r"   rj   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.   r2   poprC   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'   rh   )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+   r2   )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.   rU   rT   rC   rD   )r   ry   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   r6   r   r.   r)   r*   )r   ry   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!   r5   r   r6   )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.   rL   )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 )Nrh      r   zKeyError should be {0}, not {1})r!   r"   r   r   r]   r   formatrL   )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!   r5   r   r6   )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)rt   r2   r"   r   r   r)   r   )r   rM   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))r:   r;   )r<   r=   )r>   r?   )r@   rA   r9   )r:   r<   r>   r@   ZabcdaZahi)r"   updater   r.   r   r6   r)   r   r   r*   r+   r5   r#   r$   rE   rF   rG   r!   )r   retvalr7   ro   rp   rI   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   r6   )r   r7   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))r:   r7   )r<   rP   )r>   rQ   )r@   rP   r9   Zcbc)r"   intersection_updater   r.   r   r6   r   r)   r   r   r*   r+   r5   r#   r$   rE   rF   rG   r!   )	r   r   r7   ro   rp   rI   r"   ssrj   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   r6   r   )r   r7   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))r:   r[   )r<   r?   )r>   r(   )r@   r?   r9   Z
abcdefghihZabaZcdefghihr:   Zefghih)r"   difference_updater   r.   r   r6   r   r)   r   r   r*   r   r+   r5   r#   r$   rE   rF   rG   r!   )r   r   r7   ro   rp   rI   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   r6   r   )r   r7   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))r:   rc   )r<   r=   )r>   r(   )r@   rA   r9   )r"   r   r   r.   r   r6   r   r)   r   r   r*   r+   r5   r#   r$   rE   rF   rG   r!   )r   r   r7   ro   rp   rI   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   r6   r   )r   r7   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   rj   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.   rE   r)   ReferenceError)r   r"   ro   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'   rh   )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!   rD   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+   rD   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 )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   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	   rP   r   r   )r5   rt   r.   r2   r+   ri   rT   )r   rZ   efsr	   r	   r
   test_singleton_empty_frozenset  s    z,TestFrozenSet.test_singleton_empty_frozensetc             C   s0   |  td}|  |}| t|t| d S )Nrh   )r!   rt   r.   rT   )r   r"   rj   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   rM   )r   r	   r
   
<listcomp>  s    z+TestFrozenSet.test_hash.<locals>.<listcomp>   r   )r.   r   r!   rt   r+   r   r   r2   )r   seqresultsrM   r	   )r   r
   r     s    zTestFrozenSet.test_hashc             C   s$   | j  }| t| j t| d S )N)r"   r   r.   rT   )r   ry   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 )Nrs   ZabcdefgZapple*   )rF   rt   r!   reversedr.   rU   rT   )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   rZ   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   rM   r	   r	   r
   r     s    z9TestFrozenSet.test_hash_effectiveness.<locals>.<listcomp>r'   c                s   g | ]\}}| @ r|qS r	   r	   )r   r   m)rM   r	   r
   r     s    c             S   s<   t  g}x&t| d D ]}t |}|| qW |d |  S )Nr   )r5   rt   r   )r   numsrM   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   )rt   r2   ri   r5   	itertoolscombinations)r"   rM   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   rt   r   r5   r.   r2   ri   ZassertGreater)
r   r   Z
hashvaluesZaddhashvalueZ	elemmasksr  r  rj   r  rH   r	   )rM   r	  r
   test_hash_effectiveness  s    "$z%TestFrozenSet.test_hash_effectivenessN)r   r   r   r5   r!   rD   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 )Nrh   )r!   rt   rU   rT   )r   r"   rj   r	   r	   r
   r     s    
z/TestFrozenSetSubclass.test_constructor_identityc             C   s$   | j  }| t| j t| d S )N)r"   r   rU   rT   )r   ry   r	   r	   r
   r     s    
zTestFrozenSetSubclass.test_copyc             C   s"   |   }|  |}| || d S )N)r!   r.   )r   r"   rj   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	   rP   r   )r!   r5   rt   r.   r2   r+   ri   rT   )r   Z	FrozensetrZ   Fr   r	   r	   r
   r     s    z4TestFrozenSetSubclass.test_singleton_empty_frozensetN)r   r   r   r  r!   r5   rD   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   rq   )r   r   r   r   rE   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.   r2   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+   ry   )r   r	   r	   r
   test_equivalent_equality7  s    z%TestBasicOps.test_equivalent_equalityc             C   s   |  | j | j d S )N)r.   r+   r   ry   )r   r	   r	   r
   r   :  s    zTestBasicOps.test_copyc             C   s   | j | j B }| || j d S )N)r+   r.   ry   )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.   ry   )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.   ry   )r   r  r	   r	   r
   test_union_emptyE  s    
zTestBasicOps.test_union_emptyc             C   s   | j | j @ }| || j d S )N)r+   r.   ry   )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.   ry   )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+   r6   r  r{   r.   __length_hint__r2   )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)rt   ru   rv   rw   r+   rx   r.   )r   r   ro   r   r	   r	   r
   rz   {  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/  r0  r3  rz   r4  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+   ry   r  r   )r   r	   r	   r
   r&     s    zTestBasicOpsEmpty.setUpN)r   r   r   r&   r	   r	   r	   r
   r5    s   r5  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)rh   r   z{3})r6  r  r+   ry   r  r   )r   r	   r	   r
   r&     s    zTestBasicOpsSingleton.setUpc             C   s   |  d| j d S )Nrh   )r6   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&   r8  r9  r	   r	   r	   r
   r7    s   r7  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')})r6  r  r+   ry   r  r   )r   r	   r	   r
   r&     s    zTestBasicOpsTuple.setUpc             C   s   |  d| j d S )N)r   r;  )r6   r+   )r   r	   r	   r
   r8    s    zTestBasicOpsTuple.test_inc             C   s   |  d| j d S )N	   )r   r+   )r   r	   r	   r
   r9    s    zTestBasicOpsTuple.test_not_inN)r   r   r   r&   r8  r9  r	   r	   r	   r
   r:    s   r:  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;  rh   )r6  operatorr   r  r+   ry   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(   rR   r7   rh   )r6  r  r+   ry   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   crh   )r6  r  r+   ry   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(   rR   rA  rB  r   )r   Zcheck_warnings_warning_filters	__enter__warningssimplefilterBytesWarningr6  r  r+   ry   r  )r   r	   r	   r
   r&     s    

z"TestBasicOpsMixedStringBytes.setUpc             C   s   | j d d d  d S )N)rF  __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&   rL  r  r	   r	   r	   r
   rD    s   
rD  c               c   s   t dV  d S )NT)r*   r	   r	   r	   r
   baditer  s    rM  c               c   s
   dV  d S )NTr	   r	   r	   r	   r
   gooditer  s    rN  c               @   s(   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 )N)r)   r*   r+   rM  )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'   rh   )r   r'   rh   )ZoneZtwoZthreer?   )r+   rt   rN  )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'   rh   r   z0no exception when changing size during iteration)r+   r   r   rL   )r   r"   rM   r	   r	   r
   test_changingSizeWhileIterating  s    
z8TestExceptionPropagation.test_changingSizeWhileIteratingN)r   r   r   r   rP  rQ  rR  r	   r	   r	   r
   rO    s   	rO  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   )r5   r+   r   r.   rC   r   r   r   )r   innerZouterZelementr	   r	   r
   test_constructor  s    



zTestSetOfSets.test_constructorN)r   r   r   rU  r	   r	   r	   r
   rS    s   rS  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   rh      )r'   r   rW  )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   rW  )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   rW     )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 )Nrh   r   rX  r'   rW  )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 )Nr[  r'   r   rW  )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   rW  r[  )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 )Nrh   r   rX  )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 )Nr[  )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   rW  r[  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 )Nrh   r   rX  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 )Nr[  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   rW  )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   rW  r[  r[  )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)rh   r   rX  r'   rh   rX  rW  )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 )Nr[  r'   r   rW  )r+   r.   )r   r  r	   r	   r
   test_sym_difference_non_overlapa  s    z-TestBinaryOps.test_sym_difference_non_overlapN)r   r   r   r&   rY  rZ  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  r	   r	   r	   r
   rV    s$   rV  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   rW  )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   rW  )r+   r.   )r   r	   r	   r
   rZ  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   rW  r[  )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 )Nrh   r   rX  r'   rW  )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 )Nr[  r'   r   rW  )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 )Nrh   r   rX  r'   rW  )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   rW  r[  )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 )Nrh   r   rX  )r+   r.   )r   r	   r	   r
   ra    s    z'TestUpdateOps.test_intersection_overlapc             C   s&   |  j t dgM  _ | | j t d S )Nr[  )r+   r.   r#  )r   r	   r	   r
   rb    s    z+TestUpdateOps.test_intersection_non_overlapc             C   s.   | j t dddg | | j t dg d S )Nrh   r   rX  )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   rW  )r+   r.   )r   r	   r	   r
   rg    s    z(TestUpdateOps.test_sym_difference_subsetc             C   s*   |  j t dN  _ | | j t dg d S )N)r'   r   rW  r[  r[  )r+   r.   )r   r	   r	   r
   rh    s    z*TestUpdateOps.test_sym_difference_supersetc             C   s0   |  j t dN  _ | | j t ddddg d S )N)rh   r   rX  r'   rh   rX  rW  )r+   r.   )r   r	   r	   r
   ri    s    z)TestUpdateOps.test_sym_difference_overlapc             C   s2   |  j t dgN  _ | | j t ddddg d S )Nr[  r'   r   rW  )r+   r.   )r   r	   r	   r
   rj    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 )Nrh   r   rX  r'   rW  )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   rW  )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   rW  r[  )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)rh   r   rX  r'   rW  )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 )Nr[  r'   r   rW  )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 )Nrh   r   rX  r'   rW  )r+   r   r.   )r   r	   r	   r
   test_difference_method_call  s    z)TestUpdateOps.test_difference_method_callN)r   r   r   r&   rZ  r\  r]  r^  rl  r_  r`  ra  rb  rm  rg  rh  ri  rj  rn  ro  rp  rq  rr  rs  r	   r	   r	   r
   rk  g  s*   rk  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(   rR   r7   )r  r+   )r   r	   r	   r
   r&     s    zTestMutate.setUpc             C   s"   | j d | | j t d d S )Nr7   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.   r2   )r   Ztmpexpected_lenr2  r	   r	   r
   test_add_until_full  s    
zTestMutate.test_add_until_fullc             C   s"   | j d | | j t d d S )NrR   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   rL   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   )r2   r+   r  r   r.   )r   rw  r2  r	   r	   r
   test_remove_until_empty  s
    
z"TestMutate.test_remove_until_emptyc             C   s"   | j d | | j t d d S )Nr7   r[   )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.   r2   )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.   r2   r  r6   )r   Zpoppedr2  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(   rV   rV   )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&   ru  rv  rx  ry  r{  r|  r}  r~  r   r   r  r  r  r	   r	   r	   r
   rt    s   	rt  c               @   s0   e Zd ZdddZdddddd	d
Zdd ZdS )TestSubsetsrm   rn   )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>=rJ   y)
leftrightcasesevallocalsr.   r  case2methodgetattrreverse)r   rJ   r  r6  r0   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*   rL   )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+   rB   r   )r   r	   )r   r
   rK   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*   rL   )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+   rS   r   )r   r	   )r   r
   rW     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*   rL   )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+   rd   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*   rL   )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
   ra     s
    z'TestOnlySetsInBinaryOps.test_differenceN)r   r   r   r  r  r  r   rK   r  r   rW   r  r  r  r  r   ra   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'   rh      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'   rh   r'   r   )r   rh   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'   rh   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'   rh   )r'   r   rW  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'   rh   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   rs   r'   )rt   )rM   r	   r	   r
   gen  s    z(TestOnlySetsGenerator.setUp.<locals>.gen)r   r'   rh   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.   r2   rt   r]   )r   ry   dup_listset_listrM   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.   r2   rt   )r   ry   r  r  rM   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'   )rh   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(   rR   )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(   rR   r]   )r   r(   rR   r	   r	   r
   test_binopsVsSubsets4  s    z#TestIdentities.test_binopsVsSubsetsc             C   sj   | j | j }}| ||@ ||@  | ||B ||B  | ||A ||A  ||krf| || ||  d S )N)r(   rR   r.   rU   )r   r(   rR   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(   rR   r.   )r   r(   rR   r	   r	   r
   test_summationsF  s    $zTestIdentities.test_summationsc             C   sZ   | j | jt   }}}| || |@ | | || |@ | | ||@ ||A @ | d S )N)r(   rR   r+   r.   )r   r(   rR   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 )zRegular generatorNr	   )seqnrM   r	   r	   r
   RZ  s    
r  c               @   s    e Zd ZdZdd Zdd ZdS )GzSequence using __getitem__c             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   rM   r	   r	   r
   __getitem__c  s    zG.__getitem__N)r   r   r   r   r   r  r	   r	   r	   r
   r  _  s   r  c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	Iz Sequence using iterator protocolc             C   s   || _ d| _d S )Nr   )r  rM   )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   )rM   r2   r  r   )r   r2  r	   r	   r
   __next__m  s
     z
I.__next__N)r   r   r   r   r   r  r  r	   r	   r	   r
   r  f  s   r  c               @   s    e Zd ZdZdd Zdd ZdS )Igz9Sequence using iterator protocol defined with a generatorc             C   s   || _ d| _d S )Nr   )r  rM   )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
   r  s  s   r  c               @   s    e Zd ZdZdd Zdd ZdS )Xz Missing __getitem__ and __iter__c             C   s   || _ d| _d S )Nr   )r  rM   )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   )rM   r2   r  r   )r   r2  r	   r	   r
   r    s
     z
X.__next__N)r   r   r   r   r   r  r	   r	   r	   r
   r  |  s   r  c               @   s    e Zd ZdZdd Zdd ZdS )NzIterator missing __next__()c             C   s   || _ d| _d S )Nr   )r  rM   )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
   r    s   r  c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	EzTest propagation of exceptionsc             C   s   || _ d| _d S )Nr   )r  rM   )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 )Nrh   r   r	   )r   r	   r	   r
   r    s    z
E.__next__N)r   r   r   r   r   r  r  r	   r	   r	   r
   r    s   r  c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	SzTest immediate stopc             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
   r    s   r  )chainc             C   s   t tdd ttt| S )z Test multiple tiers of iteratorsc             S   s   | S )Nr	   )rJ   r	   r	   r
   r    r  zL.<locals>.<lambda>)r  ri   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123rP   i  )dog333333?i  i  rX  )r   )r+   r5   rt   r  r  r  r  r  r  r.   r-   r   r)   r*   r  r  ZeroDivisionErrorr  )r   Zconsr"   gr	   r	   r
   rU    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  rP   i  )r  g333333?i  i  rX  december)r   )r+   rt   rB   rS   r`   rd   r\   r  r  r  r  r  
isinstanceboolr.   r-   r   r)   r*   r  r  r  r  )r   r"   r   Zmethr  r0   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  rP   i  )r  g333333?i  i  rX  r  )r   r   r   r   Zjanuary)r   )rt   r  r  r  r  r  r  r+   r   r  rF   r.   r-   r   r)   r*   r  r  r  r  )r   r   Zmethnamer  r"   rj   r	   r	   r
   test_inplace_methods  s    "
 z,TestVariousIteratorArgs.test_inplace_methodsN)r   r   r   rU  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   rM   r	   r	   r
   r
    s    z4TestWeirdBugs.test_8420_set_merge.<locals>.<setcomp>K   T)
r  r  rt   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+   rt   r   r   r{   rF   )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   rM   )r  r	   r
   r
    s    z6TestWeirdBugs.test_merge_and_mutate.<locals>.<setcomp>rs   r   )r+   rt   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 )z-Generates all subsets of a set or sequence U.N)r{   r5   r~   r  r   )UrJ   r  r	   r	   r
   r    s    r  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	   )r5   )r   rJ   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"   )rJ   r	   r
   r     s    z#cube.<locals>.<listcomp>.<listcomp>)r5   )r   )
singletons)rJ   r
   r     s   )rt   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 )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	   )r5   )r   rV   )rJ   r  r	   r
   r   #  s    zlinegraph.<locals>.<listcomp>c                s    g | ]}| krt |gqS r	   )r5   )r   rV   )rJ   r  r	   r
   r   $  s    )r5   )r  r  Znxnyr	   )rJ   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 )zKReturn a set of faces in G.  Where a face is a set of vertices on that face)r+   itemsr   r5   )r  rZ   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 )Nrh   r[  c             s   s   | ]}|D ]
}|V  q
qd S )Nr	   )r   r  r2  r	   r	   r
   r   K  s    z'TestGraphs.test_cube.<locals>.<genexpr>rW  r   )r  r+   r.   r2   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 )
Nrh      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   r[  rW  r'   )r  r  r.   r2   r+   r  r  r|   defaultdictr   r6   )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   ru   Zrandomr   r   rH  r|   Zcollections.abcr  	Exceptionr   r   r   r   r   r   r   ZTestCaser   r+   r   r   r   r   r   r5   r  r  r#  r  r5  r7  r:  r=  r?  r@  rD  rM  rN  rO  rS  rV  rk  rt  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
