a
    ze,                    @   sZ  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dl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 d dlmZ zd dlZW n ey   dZY n0 G dd de
jZG dd de
jZG dd	 d	e
jZG d
d de
jZG dd de
jZG dd de
jZG dd de
jZG dd deZG dd de
jZedkrVe
  dS )    N)deepcopy)supportc                   @   s   e Zd Zdd Zd0ddZd1d	d
Zd2ddZd3ddZd4ddZd5ddZ	dd Z
dd Zg fddZd d! Zd"d# Zd$d% Zd&d' Zed(d)d* Zed(d+d, Zd-d. Zd/S )6OperatorsTestc                 O   s   t jj| g|R i | ddddddddd	d
ddddddddddd| _t| j D ],\}}| rr|d }nd| }|| j|< qXddddddd| _t| j D ],\}}| r|d }nd| }|| j|< qd S )N+-*@/z//divmodz**z<<z>>&^|cmp<<===!=>>=)addsubmulmatmultruedivfloordivr
   powlshiftrshiftandxororr   ltleeqnegtgez(a, b)za %s babs~intfloat)posnegr'   invertr)   r*   z(a)z%s a)unittestTestCase__init__binopslistitemsislowerunops)selfargskwargsnameexpr r;   %/usr/lib/python3.9/test/test_descr.pyr0      sN    
	
zOperatorsTest.__init__len(a)__len__c           	      C   s   d|i}|  t||| t|}t||}||jvrB|jd }q,|  t|d||j|  |  ||| t||}|  | | d S )Nar   im_funcassertEqualevaltypegetattr__dict__	__bases__)	r6   r?   resr:   methdtmbmr;   r;   r<   	unop_testJ   s    


zOperatorsTest.unop_testa+b__add__c           
      C   s   ||d}|  t||| t|}t||}||jvrD|jd }q.|  t|d||j|  |  |||| t||}	|  |	|| d S )Nr?   br   r@   rA   )
r6   r?   rR   rH   r:   rI   rJ   rK   rL   rM   r;   r;   r<   
binop_testZ   s    



zOperatorsTest.binop_testa[b:c]__getitem__c                 C   s   |||d}|  t||| t|}t||}	||jvrF|jd }q0|  t|	d|	|j|  |  |	|t||| t||}
|  |
t||| d S )Nr?   rR   cr   r@   )rB   rC   rD   rE   rF   rG   slice)r6   r?   rR   rW   rH   r:   rI   rJ   rK   rL   rM   r;   r;   r<   sliceop_testi   s    


zOperatorsTest.sliceop_testa+=b__iadd__c           
      C   s   t ||d}t|| | |d | t|}t||}||jvrP|jd }q:| t|d||j|  t ||d< ||d | | |d | t ||d< t|d |}	|	| | |d | d S )NrQ   r?   r   r@   r   execrB   rD   rE   rF   rG   )
r6   r?   rR   rH   stmtrI   rJ   rK   rL   rM   r;   r;   r<   
setop_testw   s    


zOperatorsTest.setop_testa[b]=c__setitem__c                 C   s   t |||d}t|| | |d | t|}t||}	||jvrR|jd }q<| t|	d|	|j|  t ||d< |	|d || | |d | t ||d< t|d |}
|
|| | |d | d S )NrV   r?   r   r@   r\   )r6   r?   rR   rW   rH   r^   rI   rJ   rK   rL   rM   r;   r;   r<   set2op_test   s    



zOperatorsTest.set2op_testa[b:c]=dc                 C   s   t ||||d}t|| | |d | t|}	||	jvrJ|	jd }	q4t|	|}
| t|
d|
|	j|  t ||d< |
|d t||| | |d | t ||d< t|d |}|t||| | |d | d S )N)r?   rR   rW   rJ   r?   r   r@   )r   r]   rB   rD   rF   rG   rE   rX   )r6   r?   rR   rW   rJ   rH   r^   rI   Z
dictionaryrK   rL   rM   r;   r;   r<   setsliceop_test   s    


zOperatorsTest.setsliceop_testc              	   C   s6  |  dgdgddgdd |  g ddddd |  g ddd	dd |  g dddd
d | g dd	dddgdd | dgdgddgdd | ddgdg ddd | g dddd |  ddgdg ddd |  ddgdg ddd | ddgddddgdd | g dddddgg ddd d S ) N      rO   rP   re   rf      b in a__contains__   r   a[b]rU   rT   rZ   r[   rh   re   rf   re   rf   re   rf   a*=b__imul__r=   r>   a*b__mul__b*a__rmul__r`   ra   re   rf   rh   rk         re   ru   rv   rk   rc   )rS   rY   r_   rN   rb   rd   r6   r;   r;   r<   
test_lists   s    zOperatorsTest.test_listsc              	   C   sX  |  ddddddd |  ddddddd |  ddddddd	 ddd}g }t| D ]}|| qbg }t|D ]}|| q~| || g }| D ]}|| q| || g }t|D ]}|| q| || ddd}| |dd
d | t	t
|i | | t	| i | | ddddddddddd d S )Nrf   rk   re   rh   re   ri   rj   r   rl   rU   r=   r>   rh   rg   r`   ra   )rS   r2   keysappenditerrB   __iter__dictrN   rC   repr__repr__rb   )r6   rJ   l1ilr;   r;   r<   
test_dicts   s4    

zOperatorsTest.test_dictsc                 C   s   ||d}| j  D ]>\}}||vrd| }t||rt||}| ||||| qt| j D ]<\}}||vrbd| }t||rbt||}| |||| qbd S )NrQ   z__%s__)r1   r3   hasattrrC   rS   r2   r5   rN   )r6   r?   rR   skipr   r9   r:   rH   r;   r;   r<   number_operators   s    




zOperatorsTest.number_operatorsc                 C   s|   |  dd | d d | d d G dd dt}| |dd z| d  W n tyl   Y n0 | d	 d S )
Nd   rh   re   r   c                   @   s   e Zd Zdd ZdS )z"OperatorsTest.test_ints.<locals>.Cc                 S   s   t S NNotImplementedr6   otherr;   r;   r<   rP      s    z*OperatorsTest.test_ints.<locals>.C.__add__N)__name__
__module____qualname__rP   r;   r;   r;   r<   C   s   r   ru    z+NotImplemented should have caused TypeError)r   rB   __bool__r)   	TypeErrorfailr6   r   r;   r;   r<   	test_ints   s    zOperatorsTest.test_intsc                 C   s   |  dd d S )Ng      Y@      @)r   rx   r;   r;   r<   test_floats  s    zOperatorsTest.test_floatsc                 C   s   | j ddg dd G dd dt}|ddd	}| t|d
 | |jd ||dd	}| t|d | |jd |d}| t|d | |jd d S )Ny              Y@              @)	r!   r"   r%   r&   r)   r*   r   r
   mod)r   c                   @   s&   e Zd ZdgZdd Zdd ZeZdS )z,OperatorsTest.test_complexes.<locals>.Numberprecc                 _   s$   t j| g|R  }|dd|_|S )Nr      )complex__new__getr   )clsr7   kwdsresultr;   r;   r<   r     s    z4OperatorsTest.test_complexes.<locals>.Number.__new__c                 S   sJ   | j }| jdkrd|| jf S | jdkr6d|| jf S d|| j|| jf S )N        %.*gz%.*gjz(%.*g+%.*gj))r   imagreal)r6   r   r;   r;   r<   r     s    

z5OperatorsTest.test_complexes.<locals>.Number.__repr__N)r   r   r   	__slots__r   r   __str__r;   r;   r;   r<   Number  s   r   gQ	@rv   r   z3.14rf   z3.1g     Pm@z234.5r   )r   r   rB   r   r   )r6   r   r?   r;   r;   r<   test_complexes  s    zOperatorsTest.test_complexesc                 C   s2   |  tddtdd |  tddd d S )Nr   g      @r   re   g       )rB   r   __radd__r*   __rsub__rx   r;   r;   r<   test_explicit_reverse_methods'  s    z+OperatorsTest.test_explicit_reverse_methods"the module 'xxsubtype' is internalc              	   C   s.  dd l }dd l}d&dd}||j|j< | |dg|dg|ddgdd | |g dddd	d
 | |g dddd	d
 | |g ddddd | |g ddd|ddgdd | |dg|dg|ddgdd | |ddgd|g ddd | |g dddd | |ddgd|g ddd | |ddgd|g ddd | |ddgdd|ddgdd | 	|g ddd|ddg|g d d!d G d"d# d#|j}| }| 
|g  | 
| d |d$ | 
|d$g | 
| d |d% | 
| d% d S )'Nr   c                 S   s   dd l }|| S Nr   )	xxsubtypespamlist)r   memospamr;   r;   r<   r   1  s    z/OperatorsTest.test_spam_lists.<locals>.spamlistre   rf   rO   rP   rg   ri   rj   rk   rl   rU   rT   rZ   r[   rh   rm   rn   ro   r=   r>   rp   rq   rr   rs   r`   ra   rt   ru   rv   rw   rc   c                   @   s   e Zd Zdd ZdS )z(OperatorsTest.test_spam_lists.<locals>.Cc                 S   s   dS Nre   r;   rx   r;   r;   r<   fooN      z,OperatorsTest.test_spam_lists.<locals>.C.fooNr   r   r   r   r;   r;   r;   r<   r   M  s   r   r   *   )N)copyr   _deepcopy_dispatchr   rS   rY   r_   rN   rb   rd   rB   r   r|   getstatesetstate)r6   r   r   r   r   r?   r;   r;   r<   test_spam_lists,  sP    
  

zOperatorsTest.test_spam_listsc              
   C   s  dd l }dd l}ddd}||j|j< | |ddddddd	 | |ddddddd	 | |dddddd
d |ddd}g }t| D ]}|| qg }t|D ]}|| q| 	|| g }|
 D ]}|| q| 	|| g }t|i 
|D ]}|| q| 	|| ddd}||}	| |	ddd | |	t|dd | |ddddd|dddddd G dd d|j}
|
 }| 	t| g  | 	| d d|d< | 	t| dg | 	| d |d | 	| d d S )Nr   c                 S   s2   dd l }| }t|  D ]\}}|||< q|S r   )r   spamdictr2   r3   )rJ   r   r   sdkvr;   r;   r<   r   \  s
    
z/OperatorsTest.test_spam_dicts.<locals>.spamdictrf   rk   rz   re   ri   rj   rl   rU   r=   r>   zrepr(a)r   rh   rg   r`   ra   c                   @   s   e Zd Zdd ZdS )z(OperatorsTest.test_spam_dicts.<locals>.Cc                 S   s   dS r   r;   rx   r;   r;   r<   r     r   z,OperatorsTest.test_spam_dicts.<locals>.C.fooNr   r;   r;   r;   r<   r     s   r   barr   r   r   r   )N)r   r   r   r   rS   r2   r{   r|   r}   rB   r~   rD   rN   r   rb   r3   r   r   r   )r6   r   r   r   rJ   r   r   r   Z	straightdZspamdr   r?   r;   r;   r<   test_spam_dictsX  sL    

"
zOperatorsTest.test_spam_dictsc                 C   s   |  ttj tj d S r   )rB   rangesysmaxsizer>   rx   r;   r;   r<   test_wrap_lenfunc_bad_cast  s    z(OperatorsTest.test_wrap_lenfunc_bad_castN)r=   r>   )rO   rP   )rT   rU   )rZ   r[   )r`   ra   )rc   ra   )r   r   r   r0   rN   rS   rY   r_   rb   rd   ry   r   r   r   r   r   r   r   impl_detailr   r   r   r;   r;   r;   r<   r      s&   0





!
+
1r   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 fd)d*Zejd+d, Zed-d.d/ Zd0d1 Zejd2d3 Zed-d4d5 Zd6d7 Z d8d9 Z!d:d; Z"e#j$d<d= Z%d>d? Z&e#j$d@dA Z'dBdC Z(dDdE Z)dFdG Z*edHdIdJ Z+dKdL Z,dMdN Z-dOdP Z.dQdR Z/e#0e1j2j3dSkdTdUdV Z4ej5dWdX Z6dYdZ Z7d[d\ Z8d]d^ Z9 fd_d`Z:dadb Z;dcdd Z<dedf Z=dgdh Z>didj Z?dkdl Z@dmdn ZAdodp ZBdqdr ZCdsdt ZDdudv ZEdwdx ZFdydz ZGd{d| ZHd}d~ ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_eddd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgdd Zhdd Zidd ZjddÄ Zkddń ZlddǄ ZmddɄ Zndd˄ Zodd̈́ Zpddτ Zqddф Zrddӄ ZsddՄ Ztddׄ Zuddل Zvddۄ Zwdd݄ Zxdd߄ Zydd Zzdd Z{dd Z|dd Z}dd Z~dd Z fddZe#0edu ddd Z  ZS )ClassPropertiesAndMethodsc                 C   s   |  t||d||f  d S )Nz%r has no attribute %r)
assertTruer   r6   objr9   r;   r;   r<   assertHasAttr  s    
z'ClassPropertiesAndMethods.assertHasAttrc                 C   s   |  t||d||f  d S )Nz%r has unexpected attribute %r)assertFalser   r   r;   r;   r<   assertNotHasAttr  s    
z*ClassPropertiesAndMethods.assertNotHasAttrc           	         s    ttt  i t t } |i   |jt  |t G  fdddt}  t|t |d} |jd |ddd} |d dko|d d | } |jd	  | d	 |	d
  |jd
  | d
 |	d  |jd  | d  |d d
 d|d<  |d d d}t
|D ]0}| ||< t
|D ]}|| || |< qhqRt
|D ].}t
|D ]} || | ||  qqd S )Nc                       s@   e Zd ZdZ fddZdd Z fddZdd	 Zd
d ZdS )z6ClassPropertiesAndMethods.test_python_dicts.<locals>.Cc                    sD   |r  t|d |d | _|r@t| D ]\}}|| |< q.d S Nre   r   )rB   lenstater2   r3   )
self_localr?   kwr   r   rx   r;   r<   r0     s    
z?ClassPropertiesAndMethods.test_python_dicts.<locals>.C.__init__c                 S   s   |  |dS r   )r   r6   keyr;   r;   r<   rU     s    zBClassPropertiesAndMethods.test_python_dicts.<locals>.C.__getitem__c                    s"     |td t| || d S r   )assertIsInstancerD   r   ra   )r   r   valuerx   r;   r<   ra     s    zBClassPropertiesAndMethods.test_python_dicts.<locals>.C.__setitem__c                 S   s
   || _ d S r   r   r6   r   r;   r;   r<   r     s    z?ClassPropertiesAndMethods.test_python_dicts.<locals>.C.setstatec                 S   s   | j S r   r   rx   r;   r;   r<   r     s    z?ClassPropertiesAndMethods.test_python_dicts.<locals>.C.getstateN)	r   r   r   r   r0   rU   ra   r   r   r;   rx   r;   r<   r     s   r   r   re   rf   r   r   r   r   r   
   r      2   )r   
issubclassr   r   rB   assertIs	__class__r   r   r   r   )	r6   rJ   r   a1a2r?   Nr   jr;   rx   r<   test_python_dicts  s@    


z+ClassPropertiesAndMethods.test_python_dictsc                 C   sl   G dd dt }| }|g d | |d d | |d d | |d d	 | |dd
 d d S )Nc                   @   s   e Zd Zdd ZdS )z6ClassPropertiesAndMethods.test_python_lists.<locals>.Cc                 S   s&   t |tr|j|jfS t| |d S Nr   )
isinstancerX   startstopr2   rU   r6   r   r;   r;   r<   rU     s    
zBClassPropertiesAndMethods.test_python_lists.<locals>.C.__getitem__Nr   r   r   rU   r;   r;   r;   r<   r     s   r   r   re   rf   r   r   re   e   rf   f      )r   r   )r2   extendrB   r6   r   r?   r;   r;   r<   test_python_lists  s    z+ClassPropertiesAndMethods.test_python_listsc                    s  G dd dt d}| }| | d |d | | d G dd dt }G dd	 d	|d}| | | | }| |j| G d
d dt }G dd d|d}| |jd | }| |jd G dd dtG fdddt}G dd d|d}| |jd | |j	d | 
d|j | }| | d G fdddt G dd dd}	G dd d|	}
G dd d|	}G dd	 d	||
}| |  d G dd  d |
|}| |  d! G fd"d#d#t G d$d dd}	|	 }| |d% d&|_| |jd& | |jd' G d(d) d)}G d*d d|d}	G d+d d|	}
G d,d d|	}G d-d	 d	||
}| | jd G  fd.d/d/t  G d0d d d}|  jd | }| t || |  jd G d1d dt}| }z
|  W n ty   Y n0 | d2 G d3d dt }	G d4d dt}
G d5d dt|	d}G d6d	 d	|
|}| |	t | g G fd7d8d8t }G fd9d:d:|}G d;d d|d}	| d8g   G d<d d|d}
| d:d8g   G d=d d|	|
}| d:d8g   | 
d>|j G d?d@ d@|
|	}| d:d8g   | 
d>|j G dAd	 d	|t d}| d:d8g   | 
d>|j G dBd  d ||d}| d:d8g   | 
d>|j t fdCdD}G dEdF dF|d}G dGdH dHt|d}G dIdJ dJ||d}| | | | | | g G fdKdLdL}G fdMdNdN|}G dOd d|d}	| |t |	 | dLg   | dLg   G dPd d|d}
| |t |
 | dNdLg   | dNdLg   G dQd d|	|
}| |t | | dNdLg   | dNdLg   G dRd@ d@|
|	}| |t | | dNdLg   | dNdLg   | t$ G dSd	 d	|t d}W d    n1 s0    Y  G dTd  d ||d}| |t | | dNdLg   | dNdLg   G dUdV dVt |}| |t | | dNdLg   | dNdLg   G dWdX dX|t }| |t | | dNdLg   | dNdLg   | t$ G dYdF dF|t }W d    n1 s40    Y  | t$ G dZdF dFt |}W d    n1 st0    Y  d S )[Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )3ClassPropertiesAndMethods.test_metaclass.<locals>.Cc                 S   s
   d| _ d S r   Z	_C__staterx   r;   r;   r<   r0     s    z<ClassPropertiesAndMethods.test_metaclass.<locals>.C.__init__c                 S   s   | j S r   r   rx   r;   r;   r<   r     s    z<ClassPropertiesAndMethods.test_metaclass.<locals>.C.getstatec                 S   s
   || _ d S r   r   r   r;   r;   r<   r     s    z<ClassPropertiesAndMethods.test_metaclass.<locals>.C.setstateNr   r   r   r0   r   r   r;   r;   r;   r<   r     s   r   	metaclassr   r   c                   @   s   e Zd Zdd ZdS )z<ClassPropertiesAndMethods.test_metaclass.<locals>._metaclassc                 S   s   | S r   r;   r   r;   r;   r<   myself  r   zCClassPropertiesAndMethods.test_metaclass.<locals>._metaclass.myselfN)r   r   r   r   r;   r;   r;   r<   
_metaclass  s   r   c                   @   s   e Zd ZdS 3ClassPropertiesAndMethods.test_metaclass.<locals>.DNr   r   r   r;   r;   r;   r<   D  s   r  c                   @   s   e Zd Zdd ZdS )z4ClassPropertiesAndMethods.test_metaclass.<locals>.M1c                 S   s   d|d< t | |||S )Nre   __spam__rD   r   )r   r9   basesr   r;   r;   r<   r     s    z<ClassPropertiesAndMethods.test_metaclass.<locals>.M1.__new__Nr   r   r   r   r;   r;   r;   r<   M1  s   r  c                   @   s   e Zd ZdS r   Nr  r;   r;   r;   r<   r     s   re   c                   @   s   e Zd ZdS )z;ClassPropertiesAndMethods.test_metaclass.<locals>._instanceNr  r;   r;   r;   r<   	_instance  s   r
  c                       s$   e Zd Zedd Z fddZdS )z4ClassPropertiesAndMethods.test_metaclass.<locals>.M2c                 S   s    t | }||_||_||_|S r   )objectr   r9   r  r   )r   r9   r  r   r6   r;   r;   r<   r     s
    
z<ClassPropertiesAndMethods.test_metaclass.<locals>.M2.__new__c                    s<     }| j D ]*}|drqt||| j | ||  q|S )N__)r   
startswithsetattr__get__)r6   itr   r
  r;   r<   __call__  s    

z=ClassPropertiesAndMethods.test_metaclass.<locals>.M2.__call__N)r   r   r   staticmethodr   r  r;   r  r;   r<   M2  s   
r  c                   @   s   e Zd Zdd ZdS )r   c                 S   s   dS Nr   r;   rx   r;   r;   r<   r     s    z8ClassPropertiesAndMethods.test_metaclass.<locals>.C.spamNr   r   r   r   r;   r;   r;   r<   r   
  s   r;   r   r   c                       s   e Zd Z fddZ  ZS )z;ClassPropertiesAndMethods.test_metaclass.<locals>.autosuperc                    sZ   t | | |||}|d d dkr4|dd  }q|rBd| }nd}t||t | |S )Nre   _z
_%s__superZ__super)superr   r  )r   r9   r  r   r   )r   	autosuperr;   r<   r     s    
zCClassPropertiesAndMethods.test_metaclass.<locals>.autosuper.__new__r   r   r   r   __classcell__r;   )r  r   r<   r    s   r  c                   @   s   e Zd Zdd ZdS )3ClassPropertiesAndMethods.test_metaclass.<locals>.Ac                 S   s   dS NAr;   rx   r;   r;   r<   rI   %  s    z8ClassPropertiesAndMethods.test_metaclass.<locals>.A.methNr   r   r   rI   r;   r;   r;   r<   r  $  s   r  c                   @   s   e Zd Zdd ZdS )3ClassPropertiesAndMethods.test_metaclass.<locals>.Bc                 S   s   d| j   S NB	_B__superrI   rx   r;   r;   r<   rI   (  s    z8ClassPropertiesAndMethods.test_metaclass.<locals>.B.methNr   r;   r;   r;   r<   r#  '  s   r#  c                   @   s   e Zd Zdd ZdS )r   c                 S   s   d| j   S Nr   	_C__superrI   rx   r;   r;   r<   rI   +  s    z8ClassPropertiesAndMethods.test_metaclass.<locals>.C.methNr   r;   r;   r;   r<   r   *  s   c                   @   s   e Zd Zdd ZdS )r  c                 S   s   d| j   S Nr  )	_D__superrI   rx   r;   r;   r<   rI   .  s    z8ClassPropertiesAndMethods.test_metaclass.<locals>.D.methNr   r;   r;   r;   r<   r  -  s   ZDCBAc                   @   s   e Zd Zdd ZdS )3ClassPropertiesAndMethods.test_metaclass.<locals>.Ec                 S   s   d| j   S )NE)Z	_E__superrI   rx   r;   r;   r<   rI   2  s    z8ClassPropertiesAndMethods.test_metaclass.<locals>.E.methNr   r;   r;   r;   r<   r,  1  s   r,  ZEBCAc                       s   e Zd Z fddZ  ZS )z>ClassPropertiesAndMethods.test_metaclass.<locals>.autopropertyc           	         s   i }|  D ]v\}}|drL|dd  }||d\}}|}||f||< q|dr|dd  }||d\}}|}||f||< q|  D ]\}\}}t||||< qt| | |||S )NZ_get_ru   )NNZ_set_)r3   r  r   propertyr  r   )	r   r9   r  r   hitsr   valr   set)r   autopropertyr;   r<   r   9  s"    

zFClassPropertiesAndMethods.test_metaclass.<locals>.autoproperty.__new__r  r;   )r1  r  r<   r1  6  s   r1  c                   @   s   e Zd Zdd Zdd ZdS )r  c                 S   s   | j  S r   _A__xrx   r;   r;   r<   _get_xK  s    :ClassPropertiesAndMethods.test_metaclass.<locals>.A._get_xc                 S   s   | | _ d S r   r2  r6   xr;   r;   r<   _set_xM  s    z:ClassPropertiesAndMethods.test_metaclass.<locals>.A._set_xN)r   r   r   r4  r8  r;   r;   r;   r<   r  J  s   r7  r   ic                   @   s   e Zd ZdS )z@ClassPropertiesAndMethods.test_metaclass.<locals>.multimetaclassNr  r;   r;   r;   r<   multimetaclassU  s   r9  c                   @   s   e Zd Zdd ZdS )r  c                 S   s   dS r  r;   rx   r;   r;   r<   r4  Y  s    r5  Nr   r   r   r4  r;   r;   r;   r<   r  X  s   c                   @   s   e Zd Zdd ZdS )r!  c                 S   s   d| j   S r"  )r%  r4  rx   r;   r;   r<   r4  \  s    z:ClassPropertiesAndMethods.test_metaclass.<locals>.B._get_xNr:  r;   r;   r;   r<   r#  [  s   c                   @   s   e Zd Zdd ZdS )r   c                 S   s   d| j   S r&  )r(  r4  rx   r;   r;   r<   r4  _  s    z:ClassPropertiesAndMethods.test_metaclass.<locals>.C._get_xNr:  r;   r;   r;   r<   r   ^  s   c                   @   s   e Zd Zdd ZdS )r  c                 S   s   d| j   S r)  )r*  r4  rx   r;   r;   r<   r4  b  s    z:ClassPropertiesAndMethods.test_metaclass.<locals>.D._get_xNr:  r;   r;   r;   r<   r  a  s   c                       s   e Zd ZdZ fddZdS )z3ClassPropertiesAndMethods.test_metaclass.<locals>.Tr   c                    s     j d7  _ d S r   counterr6   r7   Tr;   r<   r0   i  s    z<ClassPropertiesAndMethods.test_metaclass.<locals>.T.__init__N)r   r   r   r<  r0   r;   r>  r;   r<   r?  g  s   r?  c                   @   s   e Zd ZdS r	  r  r;   r;   r;   r<   r   k  s   c                   @   s   e Zd ZdS r	  r  r;   r;   r;   r<   r   r  r   z5calling object w/o call method should raise TypeErrorc                   @   s   e Zd Zdd ZdS )r  c                  _   s   t j| i |S r   r  r7   r8   r;   r;   r<   r   {  s    z;ClassPropertiesAndMethods.test_metaclass.<locals>.A.__new__Nr  r;   r;   r;   r<   r  z  s   c                   @   s   e Zd ZdS r!  Nr  r;   r;   r;   r<   r#  ~  s   c                   @   s   e Zd ZdS r	  r  r;   r;   r;   r<   r     s   c                   @   s   e Zd ZdS r   r  r;   r;   r;   r<   r    s   c                       s.   e Zd Ze fddZedd Z  ZS )z7ClassPropertiesAndMethods.test_metaclass.<locals>.AMetac                    s    d t | |||S )NAMetar|   r  r   mclsr9   r  nsr   	new_callsr;   r<   r     s    
z?ClassPropertiesAndMethods.test_metaclass.<locals>.AMeta.__new__c                 S   s   i S r   r;   rE  r9   r  r;   r;   r<   __prepare__  s    zCClassPropertiesAndMethods.test_metaclass.<locals>.AMeta.__prepare__r   r   r   r  r   classmethodrJ  r  r;   rH  r  r<   rB    s   rB  c                       s2   e Zd Ze fddZe fddZ  ZS )z7ClassPropertiesAndMethods.test_metaclass.<locals>.BMetac                    s    d t | |||S )NBMetarC  rD  rG  r;   r<   r     s    
z?ClassPropertiesAndMethods.test_metaclass.<locals>.BMeta.__new__c                    s   t  ||}d|d< |S )NTBMeta_was_here)r  rJ  rD  r  r;   r<   rJ    s    zCClassPropertiesAndMethods.test_metaclass.<locals>.BMeta.__prepare__rK  r;   rM  r  r<   rN    s   rN  c                   @   s   e Zd ZdS r  Nr  r;   r;   r;   r<   r    s   c                   @   s   e Zd ZdS rA  r  r;   r;   r;   r<   r#    s   c                   @   s   e Zd ZdS r	  r  r;   r;   r;   r<   r     s   rO  c                   @   s   e Zd ZdS z4ClassPropertiesAndMethods.test_metaclass.<locals>.C2Nr  r;   r;   r;   r<   C2  s   rR  c                   @   s   e Zd ZdS r   r  r;   r;   r;   r<   r    s   c                   @   s   e Zd ZdS r+  Nr  r;   r;   r;   r<   r,    s   c                     s    S r   r;   r@  )markerr;   r<   func  s    z6ClassPropertiesAndMethods.test_metaclass.<locals>.funcc                   @   s   e Zd ZdS z3ClassPropertiesAndMethods.test_metaclass.<locals>.XNr  r;   r;   r;   r<   X  s   rW  c                   @   s   e Zd ZdS )z3ClassPropertiesAndMethods.test_metaclass.<locals>.YNr  r;   r;   r;   r<   Y  s   rX  c                   @   s   e Zd ZdS )z3ClassPropertiesAndMethods.test_metaclass.<locals>.ZNr  r;   r;   r;   r<   Z  s   rY  c                       s.   e Zd Z fddZefddZ  ZS )z:ClassPropertiesAndMethods.test_metaclass.<locals>.ANotMetac                    s    d t | S NANotMetarC  rE  r7   r8   rG  r;   r<   r     s    
zBClassPropertiesAndMethods.test_metaclass.<locals>.ANotMeta.__new__c                    s     d i S rZ  r|   rI  )prepare_callsr;   r<   rJ    s    
zFClassPropertiesAndMethods.test_metaclass.<locals>.ANotMeta.__prepare__r   r   r   r   rL  rJ  r  r;   rH  r^  r  r<   r[    s   r[  c                       s0   e Zd Z fddZe fddZ  ZS )z:ClassPropertiesAndMethods.test_metaclass.<locals>.BNotMetac                    s    d t | S NBNotMetarC  r\  rG  r;   r<   r     s    
zBClassPropertiesAndMethods.test_metaclass.<locals>.BNotMeta.__new__c                    s    d t ||S ra  )r|   r  rJ  rI  )r   r^  r;   r<   rJ    s    
zFClassPropertiesAndMethods.test_metaclass.<locals>.BNotMeta.__prepare__r_  r;   r`  r  r<   rb    s   rb  c                   @   s   e Zd ZdS rP  r  r;   r;   r;   r<   r    s   c                   @   s   e Zd ZdS rA  r  r;   r;   r;   r<   r#    s   c                   @   s   e Zd ZdS r	  r  r;   r;   r;   r<   r     s   c                   @   s   e Zd ZdS rQ  r  r;   r;   r;   r<   rR    s   c                   @   s   e Zd ZdS r   r  r;   r;   r;   r<   r    s   c                   @   s   e Zd ZdS rS  r  r;   r;   r;   r<   r,    s   c                   @   s   e Zd ZdS )z3ClassPropertiesAndMethods.test_metaclass.<locals>.FNr  r;   r;   r;   r<   F  s   rc  c                   @   s   e Zd ZdS )z4ClassPropertiesAndMethods.test_metaclass.<locals>.F2Nr  r;   r;   r;   r<   F2  s   rd  c                   @   s   e Zd ZdS rV  r  r;   r;   r;   r<   rW  *  s   c                   @   s   e Zd ZdS rV  r  r;   r;   r;   r<   rW  -  s   )rD   rB   r   r   r   r   r  r  r9   r  assertInr   r   rI   r   r7  r3  r<  r   r   r   clearrF   assertRaisesr)   )r6   r   r?   r   r  rJ   r  rW   r  r  r#  r,  r9  rB  rN  rR  rU  rW  rX  rY  r[  rb  rc  rd  r;   )r?  r
  r1  r  rT  rH  r^  r<   test_metaclass  s    

		44z(ClassPropertiesAndMethods.test_metaclassc                    s   g t tG fddd}|d}d|_|j}|`| g d zG dd dtjt}W n tyt   Y n0 | d d	d
 G dd d  fddt	dD }|  
 | d S )Nc                       sB   e Zd Z fddZ fddZ fddZ fddZd	S )
z<ClassPropertiesAndMethods.test_module_subclasses.<locals>.MMc                    s     | | d S r   )r0   r6   r9   )MTr;   r<   r0   5  s    zEClassPropertiesAndMethods.test_module_subclasses.<locals>.MM.__init__c                    s    d|f  | |S )NrE   )r|   __getattribute__ri  rj  logr;   r<   rk  7  s    zMClassPropertiesAndMethods.test_module_subclasses.<locals>.MM.__getattribute__c                    s"    d||f  | || d S )Nr  )r|   __setattr__r6   r9   r   rl  r;   r<   rn  :  s    zHClassPropertiesAndMethods.test_module_subclasses.<locals>.MM.__setattr__c                    s    d|f  | | d S )Ndelattr)r|   __delattr__ri  rl  r;   r<   rq  =  s    zHClassPropertiesAndMethods.test_module_subclasses.<locals>.MM.__delattr__N)r   r   r   r0   rk  rn  rq  r;   rl  r;   r<   MM4  s   rr  r?   r   ))r  r   r   rE   r   )rp  r   c                   @   s   e Zd ZdS )z@ClassPropertiesAndMethods.test_module_subclasses.<locals>.ModuleNr  r;   r;   r;   r<   ModuleJ  s   rt  z?inheriting from ModuleType and str at the same time should failc                   S   s   d tjtjddS )Nr   r   )r   )joinrandomchoicesstringascii_lettersr;   r;   r;   r<   random_nameS  s    zEClassPropertiesAndMethods.test_module_subclasses.<locals>.random_namec                   @   s   e Zd ZdS )z;ClassPropertiesAndMethods.test_module_subclasses.<locals>.ANr  r;   r;   r;   r<   r  U  s   r  c                    s   g | ]}t   fi qS r;   rD   .0r   )r  rz  r;   r<   
<listcomp>W  r   zDClassPropertiesAndMethods.test_module_subclasses.<locals>.<listcomp>r   )rD   r   r   rB   types
ModuleTypestrr   r   r   __subclasses__)r6   rr  r?   r7  rt  Z
subclassesr;   )r  rj  rm  rz  r<   test_module_subclasses0  s"    
z0ClassPropertiesAndMethods.test_module_subclassesc                    sL  G dd dt    }| | d |d | | d G  fdddt }| }| t| g  d|d< | t| d	g | |d d | | d |d | | d | |j|t t f G d
d dt }G dd d|t}| | 	 d | t
| d | | 	 d | t
| d d S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )z>ClassPropertiesAndMethods.test_multiple_inheritance.<locals>.Cc                 S   s
   d| _ d S r   r   rx   r;   r;   r<   r0   ]  s    zGClassPropertiesAndMethods.test_multiple_inheritance.<locals>.C.__init__c                 S   s   | j S r   r   rx   r;   r;   r<   r   _  s    zGClassPropertiesAndMethods.test_multiple_inheritance.<locals>.C.getstatec                 S   s
   || _ d S r   r   r   r;   r;   r<   r   a  s    zGClassPropertiesAndMethods.test_multiple_inheritance.<locals>.C.setstateNr   r;   r;   r;   r<   r   \  s   r   r   r   c                       s   e Zd Z fddZdS )z>ClassPropertiesAndMethods.test_multiple_inheritance.<locals>.Dc                    s   t i |   |  d S r   )rD   r0   rx   r   r;   r<   r0   h  s    zGClassPropertiesAndMethods.test_multiple_inheritance.<locals>.D.__init__Nr   r   r   r0   r;   r  r;   r<   r  g  s   r  worldhello)r  r  c                   @   s   e Zd Zdd Zdd ZdS )zAClassPropertiesAndMethods.test_multiple_inheritance.<locals>.Nodec                 S   s   t |  S r   )r)   r   rx   r;   r;   r<   __int__w  s    zIClassPropertiesAndMethods.test_multiple_inheritance.<locals>.Node.__int__c                 S   s   dS )NZ23r;   rx   r;   r;   r<   r   y  s    zEClassPropertiesAndMethods.test_multiple_inheritance.<locals>.Node.fooN)r   r   r   r  r   r;   r;   r;   r<   Nodev  s   r  c                   @   s   e Zd Zdd ZdS )zAClassPropertiesAndMethods.test_multiple_inheritance.<locals>.Fragc                 S   s   dS )NZ42r;   rx   r;   r;   r<   r   |  s    zEClassPropertiesAndMethods.test_multiple_inheritance.<locals>.Frag.fooNr   r;   r;   r;   r<   Frag{  s   r     r   )r  rB   r   r   r   r2   r{   r3   __mro__r  r)   )r6   r?   r  rJ   r  r  r;   r  r<   test_multiple_inheritanceZ  s*    

z3ClassPropertiesAndMethods.test_multiple_inheritancec                 C   s  G dd dt }| |  d G dd d|}| |  d | |  d G dd d|}| |  d | |  d G dd d||}| |  d | |  d | |j||||t f G d	d
 d
||}| |  d | |  d | |j||||t f zG dd d||}W n tyP   Y n0 | d zG dd d||}W n ty   Y n0 | d d S )Nc                   @   s   e Zd Zdd ZdS )z=ClassPropertiesAndMethods.test_diamond_inheritance.<locals>.Ac                 S   s   dS r  r;   rx   r;   r;   r<   r     r   zBClassPropertiesAndMethods.test_diamond_inheritance.<locals>.A.spamNr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd Zdd Zdd ZdS )z=ClassPropertiesAndMethods.test_diamond_inheritance.<locals>.Bc                 S   s   dS r"  r;   rx   r;   r;   r<   boo  r   zAClassPropertiesAndMethods.test_diamond_inheritance.<locals>.B.booc                 S   s   dS r"  r;   rx   r;   r;   r<   r     r   zBClassPropertiesAndMethods.test_diamond_inheritance.<locals>.B.spamN)r   r   r   r  r   r;   r;   r;   r<   r#    s   r#  c                   @   s   e Zd Zdd ZdS )z=ClassPropertiesAndMethods.test_diamond_inheritance.<locals>.Cc                 S   s   dS r&  r;   rx   r;   r;   r<   r    r   zAClassPropertiesAndMethods.test_diamond_inheritance.<locals>.C.booN)r   r   r   r  r;   r;   r;   r<   r     s   r   c                   @   s   e Zd ZdS )z=ClassPropertiesAndMethods.test_diamond_inheritance.<locals>.DNr  r;   r;   r;   r<   r    r   r  c                   @   s   e Zd ZdS )z=ClassPropertiesAndMethods.test_diamond_inheritance.<locals>.ENr  r;   r;   r;   r<   r,    r   r,  c                   @   s   e Zd ZdS )z=ClassPropertiesAndMethods.test_diamond_inheritance.<locals>.FNr  r;   r;   r;   r<   rc    r   rc  z#expected MRO order disagreement (F)c                   @   s   e Zd ZdS )z=ClassPropertiesAndMethods.test_diamond_inheritance.<locals>.GNr  r;   r;   r;   r<   G  r   r  z#expected MRO order disagreement (G))r  rB   r   r  r  r   r   )r6   r  r#  r   r  r,  rc  r  r;   r;   r<   test_diamond_inheritance  s4    
z2ClassPropertiesAndMethods.test_diamond_inheritancec              
   C   s   G dd dt }G dd dt }G dd dt }G dd d|}G d	d
 d
|}G dd d||||}| |j||||||t f d S )Nc                   @   s   e Zd ZdS )z<ClassPropertiesAndMethods.test_ex5_from_c3_switch.<locals>.ANr  r;   r;   r;   r<   r    r   r  c                   @   s   e Zd ZdS )z<ClassPropertiesAndMethods.test_ex5_from_c3_switch.<locals>.BNr  r;   r;   r;   r<   r#    r   r#  c                   @   s   e Zd ZdS )z<ClassPropertiesAndMethods.test_ex5_from_c3_switch.<locals>.CNr  r;   r;   r;   r<   r     r   r   c                   @   s   e Zd ZdS )z<ClassPropertiesAndMethods.test_ex5_from_c3_switch.<locals>.XNr  r;   r;   r;   r<   rW    r   rW  c                   @   s   e Zd ZdS )z<ClassPropertiesAndMethods.test_ex5_from_c3_switch.<locals>.YNr  r;   r;   r;   r<   rX    r   rX  c                   @   s   e Zd ZdS )z<ClassPropertiesAndMethods.test_ex5_from_c3_switch.<locals>.ZNr  r;   r;   r;   r<   rY    r   rY  r  rB   r  )r6   r  r#  r   rW  rX  rY  r;   r;   r<   test_ex5_from_c3_switch  s    z1ClassPropertiesAndMethods.test_ex5_from_c3_switchc           	      C   s   G dd dt }G dd d|}G dd d|}G dd d|}G d	d
 d
|}G dd d||}G dd d|}G dd d||}| |j|||||t f | |j||||t f | |j||||||||t f	 d S )Nc                   @   s   e Zd ZdS )z9ClassPropertiesAndMethods.test_monotonicity.<locals>.BoatNr  r;   r;   r;   r<   Boat  r   r  c                   @   s   e Zd ZdS )z<ClassPropertiesAndMethods.test_monotonicity.<locals>.DayBoatNr  r;   r;   r;   r<   DayBoat  r   r  c                   @   s   e Zd ZdS )z>ClassPropertiesAndMethods.test_monotonicity.<locals>.WheelBoatNr  r;   r;   r;   r<   	WheelBoat  r   r  c                   @   s   e Zd ZdS )z?ClassPropertiesAndMethods.test_monotonicity.<locals>.EngineLessNr  r;   r;   r;   r<   
EngineLess  r   r  c                   @   s   e Zd ZdS )zCClassPropertiesAndMethods.test_monotonicity.<locals>.SmallMultihullNr  r;   r;   r;   r<   SmallMultihull  r   r  c                   @   s   e Zd ZdS )zCClassPropertiesAndMethods.test_monotonicity.<locals>.PedalWheelBoatNr  r;   r;   r;   r<   PedalWheelBoat  r   r  c                   @   s   e Zd ZdS )zCClassPropertiesAndMethods.test_monotonicity.<locals>.SmallCatamaranNr  r;   r;   r;   r<   SmallCatamaran  r   r  c                   @   s   e Zd ZdS )z;ClassPropertiesAndMethods.test_monotonicity.<locals>.PedaloNr  r;   r;   r;   r<   Pedalo  r   r  r  )	r6   r  r  r  r  r  r  r  r  r;   r;   r<   test_monotonicity  s&    
z+ClassPropertiesAndMethods.test_monotonicityc              
   C   s   G dd dt }G dd dt }G dd dt }G dd d||}G d	d
 d
||}G dd d||}| |j||||||t f d S )Nc                   @   s   e Zd ZdS )zAClassPropertiesAndMethods.test_consistency_with_epg.<locals>.PaneNr  r;   r;   r;   r<   Pane  r   r  c                   @   s   e Zd ZdS )zKClassPropertiesAndMethods.test_consistency_with_epg.<locals>.ScrollingMixinNr  r;   r;   r;   r<   ScrollingMixin  r   r  c                   @   s   e Zd ZdS )zIClassPropertiesAndMethods.test_consistency_with_epg.<locals>.EditingMixinNr  r;   r;   r;   r<   EditingMixin  r   r  c                   @   s   e Zd ZdS )zKClassPropertiesAndMethods.test_consistency_with_epg.<locals>.ScrollablePaneNr  r;   r;   r;   r<   ScrollablePane  r   r  c                   @   s   e Zd ZdS )zIClassPropertiesAndMethods.test_consistency_with_epg.<locals>.EditablePaneNr  r;   r;   r;   r<   EditablePane  r   r  c                   @   s   e Zd ZdS )zSClassPropertiesAndMethods.test_consistency_with_epg.<locals>.EditableScrollablePaneNr  r;   r;   r;   r<   EditableScrollablePane  r   r  r  )r6   r  r  r  r  r  r  r;   r;   r<   test_consistency_with_epg  s    z3ClassPropertiesAndMethods.test_consistency_with_epgc                    s   d} fdd}G dd dt }G dd d|}G dd	 d	t }|td
td||fi  |t|td||fi  |t|td|||fi  G dd dt }G dd d|}G dd d|}G dd d||}	G dd d||}
|t|td|	|
fi  d S )NzCCannot create a consistent method resolution
order (MRO) for bases c              
      sp   z||  W nP | y\ } z8t  rHt||sH dt||f  W Y d }~nd }~0 0  d|   d S )NzMessage %r, expected %rzExpected %s)r   check_impl_detailr  r  r   )excexpectedcallabler7   msgrx   r;   r<   raises  s    
z?ClassPropertiesAndMethods.test_mro_disagreement.<locals>.raisesc                   @   s   e Zd ZdS )z:ClassPropertiesAndMethods.test_mro_disagreement.<locals>.ANr  r;   r;   r;   r<   r    r   r  c                   @   s   e Zd ZdS )z:ClassPropertiesAndMethods.test_mro_disagreement.<locals>.BNr  r;   r;   r;   r<   r#    r   r#  c                   @   s   e Zd ZdS )z:ClassPropertiesAndMethods.test_mro_disagreement.<locals>.CNr  r;   r;   r;   r<   r     r   r   zduplicate base class ArW  c                   @   s   e Zd ZdS )zCClassPropertiesAndMethods.test_mro_disagreement.<locals>.GridLayoutNr  r;   r;   r;   r<   
GridLayout  r   r  c                   @   s   e Zd ZdS )zGClassPropertiesAndMethods.test_mro_disagreement.<locals>.HorizontalGridNr  r;   r;   r;   r<   HorizontalGrid  r   r  c                   @   s   e Zd ZdS )zEClassPropertiesAndMethods.test_mro_disagreement.<locals>.VerticalGridNr  r;   r;   r;   r<   VerticalGrid  r   r  c                   @   s   e Zd ZdS )z?ClassPropertiesAndMethods.test_mro_disagreement.<locals>.HVGridNr  r;   r;   r;   r<   HVGrid  r   r  c                   @   s   e Zd ZdS )z?ClassPropertiesAndMethods.test_mro_disagreement.<locals>.VHGridNr  r;   r;   r;   r<   VHGrid  r   r  ZConfusedGrid)r  r   rD   )r6   Zmro_err_msgr  r  r#  r   r  r  r  r  r  r;   rx   r<   test_mro_disagreement  s,    z/ClassPropertiesAndMethods.test_mro_disagreementc              	   C   s   t  }| |jt  | t|t  t  }| || | |d z
d|_W n ttfyb   Y n0 | 	d | t  d G dd dt }| }| |j
i  d|_| |jd | |j
ddi d S )Nr   r   z1object() should not allow setting a foo attributerF   c                   @   s   e Zd ZdS )z:ClassPropertiesAndMethods.test_object_class.<locals>.CdictNr  r;   r;   r;   r<   Cdict  s   r  re   )r  rB   r   rD   assertNotEqualr   r   AttributeErrorr   r   rF   )r6   r?   rR   r  r7  r;   r;   r<   test_object_class  s$    

z+ClassPropertiesAndMethods.test_object_classc           
      C   s`  G dd dt j}t d}| |jt ju  | t|d ||_| |j|u  | t|d t j|_| |jt ju  | t|d G dd dt}| t |d_W d    n1 s0    Y  G dd	 d	t	}| t |d
_W d    n1 s0    Y  G dd dt
}| t |d_W d    n1 sH0    Y  G dd dt}| t |d_W d    n1 s0    Y  G dd dt}| t |d_W d    n1 s0    Y  G dd dt}| t |d_W d    n1 s0    Y  G dd dt}	| t |	t _W d    n1 sR0    Y  d S )Nc                   @   s   e Zd ZdZdS )zjClassPropertiesAndMethods.test_object_class_assignment_between_heaptypes_and_nonheaptypes.<locals>.SubTypere   Nr   r   r   r?   r;   r;   r;   r<   SubType  s   r  rL   r?   c                   @   s   e Zd ZdZdS )zhClassPropertiesAndMethods.test_object_class_assignment_between_heaptypes_and_nonheaptypes.<locals>.MyIntr;   Nr   r   r   r   r;   r;   r;   r<   MyInt-  s   r  re   c                   @   s   e Zd ZdZdS )zjClassPropertiesAndMethods.test_object_class_assignment_between_heaptypes_and_nonheaptypes.<locals>.MyFloatr;   Nr  r;   r;   r;   r<   MyFloat2  s   r        ?c                   @   s   e Zd ZdZdS )zlClassPropertiesAndMethods.test_object_class_assignment_between_heaptypes_and_nonheaptypes.<locals>.MyComplexr;   Nr  r;   r;   r;   r<   	MyComplex7  s   r  y      ?       @c                   @   s   e Zd ZdZdS )zhClassPropertiesAndMethods.test_object_class_assignment_between_heaptypes_and_nonheaptypes.<locals>.MyStrr;   Nr  r;   r;   r;   r<   MyStr<  s   r  c                   @   s   e Zd ZdZdS )zjClassPropertiesAndMethods.test_object_class_assignment_between_heaptypes_and_nonheaptypes.<locals>.MyBytesr;   Nr  r;   r;   r;   r<   MyBytesA  s   r     ac                   @   s   e Zd ZdZdS )zjClassPropertiesAndMethods.test_object_class_assignment_between_heaptypes_and_nonheaptypes.<locals>.MyTupler;   Nr  r;   r;   r;   r<   MyTupleF  s   r  r;   c                   @   s   e Zd ZdZdS )znClassPropertiesAndMethods.test_object_class_assignment_between_heaptypes_and_nonheaptypes.<locals>.MyFrozenSetr;   Nr  r;   r;   r;   r<   MyFrozenSetK  s   r  )r  r  r   r   r   r   r)   rg  r   r*   r   r  bytestuple	frozenset)
r6   r  rL   r  r  r  r  r  r  r  r;   r;   r<   ?test_object_class_assignment_between_heaptypes_and_nonheaptypes  s>    
$&&&&&zYClassPropertiesAndMethods.test_object_class_assignment_between_heaptypes_and_nonheaptypesc              	      s  G dd dt }| }|d |d G dd dt }| }|d |d d|_|jd d |_|jd  |`|d G d	d
 d
t }| }|d |d |d |d d|_d|_d|_|jd |jd |jd G dd dt }|d}|d |d | d z
d|_W n tyt   Y n0 	d zG dd dt }W n t
y   Y n0 	d zG dd dt }W n t
y   Y n0 	d zG dd dt }W n t
y   Y n0 	d zG dd dt }W n t
yD   Y n0 	d zG dd dt }W n t
yx   Y n0 	d G d d dt }G d!d dt }| }d|_|jd G d"d dt }| }d|_|jd d#G fd$ddt }| }d|_|jd td% t zG d&d dt }W n t
tfyZ   Y n0 	d' G  fd(d)d)t  G d*d dt }| }  |_  |_  |_ jd ~t   jd% G d+d, d,|}| }  |_  |_ jd ~t   jd% G d-d. d.|}	|	 }  |_  |_  |_ jd ~t   jd% G d/d0 d0t }
|
 }  |g|_ jd d }t   jd% ttd1rG d2d3 d3t }| }tt }td4D ]}||k qtt }|| G fd5d6d6t }td7}| }~W d    n1 sT0    Y  | d8 G d9d: d:t }t | `W d    n1 s0    Y  d S );Nc                   @   s   e Zd Zg ZdS )z0ClassPropertiesAndMethods.test_slots.<locals>.C0Nr  r;   r;   r;   r<   C0R  s   r  rF   r   c                   @   s   e Zd ZdgZdS )z0ClassPropertiesAndMethods.test_slots.<locals>.C1r?   Nr  r;   r;   r;   r<   C1X  s   r  r?   re   c                   @   s   e Zd Zg dZdS )z0ClassPropertiesAndMethods.test_slots.<locals>.C3rV   Nr  r;   r;   r;   r<   C3d  s   r  rR   rW   rf   rh   c                   @   s&   e Zd ZdZdgZdd Zdd ZdS )z0ClassPropertiesAndMethods.test_slots.<locals>.C4zValidate name mangling__ac                 S   s
   || _ d S r   Z_C4__ar6   r   r;   r;   r<   r0   u  s    z9ClassPropertiesAndMethods.test_slots.<locals>.C4.__init__c                 S   s   | j S r   r  rx   r;   r;   r<   r   w  s    z4ClassPropertiesAndMethods.test_slots.<locals>.C4.getN)r   r   r   __doc__r   r0   r   r;   r;   r;   r<   C4r  s   r  ru   r  rv   z$Double underscored names not mangledc                   @   s   e Zd ZdgZdS /ClassPropertiesAndMethods.test_slots.<locals>.CNr  r;   r;   r;   r<   r     s   r   z[None] slots not caughtc                   @   s   e Zd ZdgZdS )r  zfoo barNr  r;   r;   r;   r<   r     s   z['foo bar'] slots not caughtc                   @   s   e Zd ZdgZdS )r  zfoo barNr  r;   r;   r;   r<   r     s   z['foo\0bar'] slots not caughtc                   @   s   e Zd ZdgZdS )r  1Nr  r;   r;   r;   r<   r     s   z['1'] slots not caughtc                   @   s   e Zd ZdgZdS )r  r   Nr  r;   r;   r;   r<   r     s   z[''] slots not caughtc                   @   s   e Zd Zg dZdS )r  )r?   Za_bZ_aZA0123456789ZNr  r;   r;   r;   r<   r     s   c                   @   s   e Zd ZdZdS r  abcNr  r;   r;   r;   r<   r     s   c                   @   s   e Zd ZdZdS r  r  r;   r;   r;   r<   r     s   r   c                       s   e Zd Z ZdS r  r  r;   )slotsr;   r<   r     s   r   c                   @   s   e Zd ZedgZdS )r     N)r   r   r   chrr   r;   r;   r;   r<   r     s   z[chr(128)] slots not caughtc                       s(   e Zd ZdZ fddZ fddZdS )z5ClassPropertiesAndMethods.test_slots.<locals>.Countedr   c                    s     j d7  _ d S r   r;  rx   Countedr;   r<   r0     s    z>ClassPropertiesAndMethods.test_slots.<locals>.Counted.__init__c                    s     j d8  _ d S r   r;  rx   r  r;   r<   __del__  s    z=ClassPropertiesAndMethods.test_slots.<locals>.Counted.__del__N)r   r   r   r<  r0   r  r;   r  r;   r<   r    s   r  c                   @   s   e Zd Zg dZdS )r  rV   Nr  r;   r;   r;   r<   r     s   c                   @   s   e Zd ZdS )z/ClassPropertiesAndMethods.test_slots.<locals>.DNr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdgZdS )z/ClassPropertiesAndMethods.test_slots.<locals>.EeNr  r;   r;   r;   r<   r,    s   r,  c                   @   s   e Zd ZddgZdS )z/ClassPropertiesAndMethods.test_slots.<locals>.Fr?   rR   Nr  r;   r;   r;   r<   rc    s   rc  get_objectsc                   @   s   e Zd Zdd ZdS )z/ClassPropertiesAndMethods.test_slots.<locals>.Gc                 S   s   dS )NFr;   r   r;   r;   r<   __eq__  s    z6ClassPropertiesAndMethods.test_slots.<locals>.G.__eq__Nr   r   r   r  r;   r;   r;   r<   r    s   r  r   c                       s(   e Zd ZddgZdd Z fddZdS )z/ClassPropertiesAndMethods.test_slots.<locals>.Hr?   rR   c                 S   s   d| _ d| _d S Nre   rf   rQ   rx   r;   r;   r<   r0   
  s    z8ClassPropertiesAndMethods.test_slots.<locals>.H.__init__c                    s      | jd   | jd d S r  )rB   r?   rR   )self_rx   r;   r<   r    s    z7ClassPropertiesAndMethods.test_slots.<locals>.H.__del__N)r   r   r   r   r0   r  r;   rx   r;   r<   H  s   r  stderrr   c                   @   s   e Zd ZdZdS )z/ClassPropertiesAndMethods.test_slots.<locals>.Xr?   Nr  r;   r;   r;   r<   rW    s   rW  )r  r   r?   rB   rR   rW   r   Z_ClassPropertiesAndMethods__ar  r   r   r  r   r   rD   r  UnicodeEncodeErrorr<  r   
gc_collectzr  r   gcr   r  r   Zcaptured_outputgetvaluerg  )r6   r  r7  r  r  r  r   rW   r  r,  rc  sr  gZorig_objectsr   Znew_objectsr  hrW  r;   )r  r6   r  r<   
test_slotsP  s   







"z$ClassPropertiesAndMethods.test_slotsc                 C   s0  G dd dt }| }| |d | |d d|_| |jddi G dd dt }| }| |d | |d z
d|_W n ty   Y n0 | d	 G d
d d||}| }| |d | |d d|_| |jddi G dd d||}| }| |d | |d d|_| |jddi d S )Nc                   @   s   e Zd ZdgZdS )z7ClassPropertiesAndMethods.test_slots_special.<locals>.DrF   Nr  r;   r;   r;   r<   r    s   r  rF   __weakref__r   r   c                   @   s   e Zd ZdgZdS )z7ClassPropertiesAndMethods.test_slots_special.<locals>.Wr  Nr  r;   r;   r;   r<   W$  s   r  z!shouldn't be allowed to set a.fooc                   @   s   e Zd Zg ZdS )z8ClassPropertiesAndMethods.test_slots_special.<locals>.C1Nr  r;   r;   r;   r<   r  0  s   r  c                   @   s   e Zd Zg ZdS )z8ClassPropertiesAndMethods.test_slots_special.<locals>.C2Nr  r;   r;   r;   r<   rR  8  s   rR  )r  r   r   r   rB   rF   r  r   )r6   r  r?   r  r  rR  r;   r;   r<   test_slots_special  s6    

z,ClassPropertiesAndMethods.test_slots_specialc           	         s`  G  fdddt }G dd d}G dd d||dd} |jd tj | } |jd	  |d d	|_ |jd	  	t
 G d
d d}W d    n1 s0    Y  G dd d|dd} |j|jd d d   |jd tj | } |d d|_ |jd  	t
 G dd d}W d    n1 sR0    Y  d S )Nc                       s   e Zd Z fddZ  ZS )z;ClassPropertiesAndMethods.test_slots_special2.<locals>.Metac                    s    || t | |||S r   )re  r  r   )r   r9   r  	namespaceattrr   r6   r;   r<   r   C  s    zCClassPropertiesAndMethods.test_slots_special2.<locals>.Meta.__new__r  r;   rx   r  r<   MetaB  s   r  c                   @   s   e Zd Zdd ZdS )z9ClassPropertiesAndMethods.test_slots_special2.<locals>.C1c                 S   s
   d| _ d S r  )rR   rx   r;   r;   r<   r0   H  s    zBClassPropertiesAndMethods.test_slots_special2.<locals>.C1.__init__Nr  r;   r;   r;   r<   r  G  s   r  c                       s"   e Zd ZdgZ fddZ  ZS )z9ClassPropertiesAndMethods.test_slots_special2.<locals>.C2r  c                    s   t    d S r   r  r0   rx   r  r;   r<   r0   L  s    zBClassPropertiesAndMethods.test_slots_special2.<locals>.C2.__init__)r   r   r   r   r0   r  r;   r;   r  r<   rR  J  s   rR  r  )r   r  r   c                   @   s   e Zd ZdZdgZdS )z9ClassPropertiesAndMethods.test_slots_special2.<locals>.C3r   r  N)r   r   r   r  r   r;   r;   r;   r<   r  V  s   r  c                   @   s   e Zd ZdgZdS )z9ClassPropertiesAndMethods.test_slots_special2.<locals>.Q1r   Nr  r;   r;   r;   r<   Q1Z  s   r  r   qc                   @   s   e Zd Ze ZdgZdS )z9ClassPropertiesAndMethods.test_slots_special2.<locals>.Q2r   N)r   r   r   r  r   r;   r;   r;   r<   Q2d  s   r  )rD   r   rF   r  MemberDescriptorTyperB   rR   r   r  rg  r   r   )	r6   r  r  rR  rW   r  r  r  r  r;   rx   r<   test_slots_special2@  s0    ,z-ClassPropertiesAndMethods.test_slots_special2c                 C   s`   dd l }G dd d|jd}G dd dt}|| | }| || | t|jj|d d S )Nr   c                   @   s   e Zd ZdZdS )z>ClassPropertiesAndMethods.test_slots_descriptor.<locals>.MyABCr?   Nr  r;   r;   r;   r<   MyABCl  s   r  r   c                   @   s   e Zd ZdS )zBClassPropertiesAndMethods.test_slots_descriptor.<locals>.UnrelatedNr  r;   r;   r;   r<   	Unrelatedo  s   r  rh   )	r  ABCMetar  registerr   rg  r   r?   __set__)r6   r  r  r  ur;   r;   r<   test_slots_descriptorh  s    
z/ClassPropertiesAndMethods.test_slots_descriptorc                 C   sH  G dd dt }G dd d|}G dd d|}d|_| |jd | |jd | |jd G dd	 d	t }| }| |d
 d|_| |jd dd |_| | d dd |_| t|d dd |_| t	|d | |jd | |d dd }||_
| |jd d|_| |jd dd }||_z
d|_W n tyZ   Y n0 | d | |jd G dd d|}| }d|_| |jd G dd dt	}	| d|	d d | |	dd d | d|	d  d! | |	d d d! | |	d |	d d! G d"d# d#t}
G d$d% d%|
d&}| |t  d S )'Nc                   @   s   e Zd ZdS z2ClassPropertiesAndMethods.test_dynamics.<locals>.DNr  r;   r;   r;   r<   r  {  s   r  c                   @   s   e Zd ZdS )z2ClassPropertiesAndMethods.test_dynamics.<locals>.ENr  r;   r;   r;   r<   r,  }  s   r,  c                   @   s   e Zd ZdS )z2ClassPropertiesAndMethods.test_dynamics.<locals>.FNr  r;   r;   r;   r<   rc    s   rc  re   c                   @   s   e Zd ZdS )z2ClassPropertiesAndMethods.test_dynamics.<locals>.CNr  r;   r;   r;   r<   r     s   r   foobarrf   c                 S   s   dS r  r;   rx   r;   r;   r<   <lambda>  r   z9ClassPropertiesAndMethods.test_dynamics.<locals>.<lambda>r   c                 S   s   dS )NC()r;   rx   r;   r;   r<   r    r   r  c                 S   s   dS r   r;   rx   r;   r;   r<   r    r   r   r   c                 S   s   |dkrdS t d S Nr   r  ri  r;   r;   r<   	mygetattr  s    z:ClassPropertiesAndMethods.test_dynamics.<locals>.mygetattrr   c                 S   s   |dkrt t| ||S r   )r  r  rn  ro  r;   r;   r<   	mysetattr  s    z:ClassPropertiesAndMethods.test_dynamics.<locals>.mysetattrznot spamzexpected AttributeErrorc                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   r    s   c                   @   s   e Zd ZdS )z2ClassPropertiesAndMethods.test_dynamics.<locals>.INr  r;   r;   r;   r<   I  s   r  r?   Zaarh   rv   c                   @   s   e Zd ZdS )zAClassPropertiesAndMethods.test_dynamics.<locals>.dynamicmetaclassNr  r;   r;   r;   r<   dynamicmetaclass  s   r  c                   @   s   e Zd ZdS )z:ClassPropertiesAndMethods.test_dynamics.<locals>.someclassNr  r;   r;   r;   r<   	someclass  s   r  r   )r  r   rB   r   r  methodr   r   r  r)   __getattr__r   newrn  r  r   rD   r  )r6   r  r,  rc  r   r?   r  r  rJ   r  r  r  r;   r;   r<   test_dynamicsy  s\    




z'ClassPropertiesAndMethods.test_dynamicsc                 C   s  zG dd dt t}W n ty(   Y n0 | d zG dd dtd }W n ty\   Y n0 | d G dd d}zG dd dtt}W n ty   Y n0 | d	 zG d
d dt}W n ty   Y n0 | d zG dd dt}W n ty   Y n0 | d G dd dt}G dd dt}G dd dt|d}G dd dt|d}zG dd d||}W n ty   Y n0 | d d S )Nc                   @   s   e Zd ZdS 0ClassPropertiesAndMethods.test_errors.<locals>.CNr  r;   r;   r;   r<   r     s   r   z5inheritance from both list and dict should be illegalc                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   r     s   z+inheritance from non-type should be illegalc                   @   s   e Zd ZdS )z6ClassPropertiesAndMethods.test_errors.<locals>.ClassicNr  r;   r;   r;   r<   Classic  s   r  c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   r     s   z,inheritance from CFunction should be illegalc                   @   s   e Zd ZdZdS r  re   Nr  r;   r;   r;   r<   r     s   z__slots__ = 1 should be illegalc                   @   s   e Zd ZdgZdS r  r  r;   r;   r;   r<   r     s   z!__slots__ = [1] should be illegalc                   @   s   e Zd ZdS )z1ClassPropertiesAndMethods.test_errors.<locals>.M1Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )z1ClassPropertiesAndMethods.test_errors.<locals>.M2Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )z1ClassPropertiesAndMethods.test_errors.<locals>.A1Nr  r;   r;   r;   r<   A1  s   r  r   c                   @   s   e Zd ZdS )z1ClassPropertiesAndMethods.test_errors.<locals>.A2Nr  r;   r;   r;   r<   A2  s   r  c                   @   s   e Zd ZdS )z0ClassPropertiesAndMethods.test_errors.<locals>.BNr  r;   r;   r;   r<   r#    s   r#  z5finding the most derived metaclass should have failed)r2   r   r   r   r  rD   r   )r6   r   r  r  r  r  r  r#  r;   r;   r<   test_errors  sF    




z%ClassPropertiesAndMethods.test_errorsc           	         s$  G dd dt }| }| |d|df | |d|df | |d|df G dd d|}| }| |d|df | |d|df | |d|df | ||d|df dd }t|}| |dtd	td	f | |dd	td	f | |jj| | |jj| | t||jj| | t||jj| | t|| |f | t|| |f tdd}| 	t
| zt|dd
 W n t
y   Y n0 | d t|}| |ji  d	|_| |jd	 | |jdd	i |`| |d d S )Nc                   @   s   e Zd Zdd ZeeZdS )z6ClassPropertiesAndMethods.test_classmethods.<locals>.Cc                  W   s   | S r   r;   r?   r;   r;   r<   r     r   z:ClassPropertiesAndMethods.test_classmethods.<locals>.C.fooNr   r   r   r   rL  goor;   r;   r;   r<   r     s   r   re   c                   @   s   e Zd ZdS )z6ClassPropertiesAndMethods.test_classmethods.<locals>.DNr  r;   r;   r;   r<   r    s   r  c                 S   s   | |fS r   r;   r   argr;   r;   r<   f  r   z6ClassPropertiesAndMethods.test_classmethods.<locals>.fr   r   r   z)classmethod shouldn't accept keyword argsr7  )r  rB   r  r   rL  r  r)   __self__r  rg  r   r   rF   r7  r   )	r6   r   rW   r  rJ   r  ZffrI   cmr  r;   r<   test_classmethods  sF    
z+ClassPropertiesAndMethods.test_classmethodsc                 C   sL   t td}td }| }tdD ]}|d  q"| j| | ddd d S Ngettotalrefcountr   r   r   )Zdelta)r   get_attributer   rL  r   r0   assertAlmostEqual)r6   r  r  refs_beforer   r;   r;   r<   %test_refleaks_in_classmethod___init__-  s    z?ClassPropertiesAndMethods.test_refleaks_in_classmethod___init__r   c                 C   sZ  dd l }d}ddi}|jj|i |\}}}| ||j | || | || | j|i |\}}}| ||j | || | || |jjd }||jg|R i |\}}	}
| ||j | |	| | |
| G dd d|j}||g|R i |\}}	}
| || | |	| | |
| | t}|  W d    n1 s\0    Y  | t|jd | t}||  W d    n1 s0    Y  | t|jd	 | t}|t	 W d    n1 s0    Y  d
}| t|j| | t}|
d t	 W d    n1 s:0    Y  | t|j| d S )Nr   rg   r  {   	classmethc                   @   s   e Zd ZdS )zAClassPropertiesAndMethods.test_classmethods_in_c.<locals>.SubSpamNr  r;   r;   r;   r<   SubSpamI  r   r$  zGdescriptor 'classmeth' of 'xxsubtype.spamlist' object needs an argumentzfdescriptor 'classmeth' for type 'xxsubtype.spamlist' needs a type, not a 'xxsubtype.spamlist' as arg 2zUdescriptor 'classmeth' requires a subtype of 'xxsubtype.spamlist' but received 'list')r   r   r#  rB   rF   rg  r   r  	exceptionr2   r  )r6   r   r?   rJ   r7  r   d1Zspam_cmZx2r   d2r$  r  expected_errmsgr;   r;   r<   test_classmethods_in_c6  sR    &,(,z0ClassPropertiesAndMethods.test_classmethods_in_cc                 C   s  G dd dt }| }| |dd | |dd | |d|df G dd d|}| }| |dd | |dd | |d|df | ||d|df td }| |ji  d|_| |jd | |jddi |`| |d d S )	Nc                   @   s   e Zd Zdd ZeeZdS )z7ClassPropertiesAndMethods.test_staticmethods.<locals>.Cc                  W   s   | S r   r;   r  r;   r;   r<   r   k  r   z;ClassPropertiesAndMethods.test_staticmethods.<locals>.C.fooN)r   r   r   r   r  r  r;   r;   r;   r<   r   j  s   r   re   re   c                   @   s   e Zd ZdS )z7ClassPropertiesAndMethods.test_staticmethods.<locals>.DNr  r;   r;   r;   r<   r  q  s   r  r   r7  )r  rB   r  r   r  rF   r7  r   )r6   r   rW   r  rJ   smr;   r;   r<   test_staticmethodsh  s$    z,ClassPropertiesAndMethods.test_staticmethodsc                 C   sL   t td}td }| }tdD ]}|d  q"| j| | ddd d S r  )r   r  r   r  r   r0   r  )r6   r  r+  r   r   r;   r;   r<   &test_refleaks_in_staticmethod___init__  s    z@ClassPropertiesAndMethods.test_refleaks_in_staticmethod___init__c                 C   s   dd l }d}ddi}|jj|i |\}}}| |d  | || | || | j|i |\}}}| |d  | || | || d S )Nr   rg   r  r"  )r   r   Z
staticmethrB   )r6   r   r?   rJ   r7  r   r&  r'  r;   r;   r<   test_staticmethods_in_c  s    z1ClassPropertiesAndMethods.test_staticmethods_in_cc                    s  G dd d   }|   d df |  |d df |  |d|df G dd d }| }|  |d|df |  |d|df |  |d|df |  ||d|df G  fddd}|  | jj j | t j  d d S )	Nc                   @   s   e Zd Zdd ZeeZdS )z1ClassPropertiesAndMethods.test_classic.<locals>.Cc                  W   s   | S r   r;   r  r;   r;   r<   r     r   z5ClassPropertiesAndMethods.test_classic.<locals>.C.fooNr  r;   r;   r;   r<   r     s   r   re   c                   @   s   e Zd ZdS )z1ClassPropertiesAndMethods.test_classic.<locals>.DNr  r;   r;   r;   r<   r    s   r  c                       s   e Zd Z jZdS )z1ClassPropertiesAndMethods.test_classic.<locals>.ENr   r;   r  r;   r<   r,    s   r,  <bound method )rB   r  r   __func__r   r   r  r  )r6   rW   r  rJ   r,  r;   r  r<   test_classic  s    z&ClassPropertiesAndMethods.test_classicc                 C   sh   G dd dt }| }| |jd | |jd d|_| |jd | |jd |`| |d d S )Nc                   @   sH   e Zd ZG dd deZdd Zdd Zdd Zd	d
 ZeeeeZ	dS )z2ClassPropertiesAndMethods.test_compattr.<locals>.Cc                   @   s0   e Zd Zd
ddZdddZdd Zdd	 ZdS )zEClassPropertiesAndMethods.test_compattr.<locals>.C.computed_attributeNc                 S   s   || _ || _|| _d S r   )_computed_attribute__get_computed_attribute__set_computed_attribute__delete)r6   r   r0  deleter;   r;   r<   r0     s    zNClassPropertiesAndMethods.test_compattr.<locals>.C.computed_attribute.__init__c                 S   s
   |  |S r   )r2  )r6   r   rD   r;   r;   r<   r    s    zMClassPropertiesAndMethods.test_compattr.<locals>.C.computed_attribute.__get__c                 S   s   |  ||S r   )r3  r6   r   r   r;   r;   r<   r    s    zMClassPropertiesAndMethods.test_compattr.<locals>.C.computed_attribute.__set__c                 S   s
   |  |S r   )r4  r6   r   r;   r;   r<   
__delete__  s    zPClassPropertiesAndMethods.test_compattr.<locals>.C.computed_attribute.__delete__)NN)N)r   r   r   r0   r  r  r8  r;   r;   r;   r<   computed_attribute  s   

r9  c                 S   s
   d| _ d S r   _C__xrx   r;   r;   r<   r0     s    z;ClassPropertiesAndMethods.test_compattr.<locals>.C.__init__c                 S   s   | j }|d | _ |S r   r:  r6  r;   r;   r<   Z__get_x  s    
z:ClassPropertiesAndMethods.test_compattr.<locals>.C.__get_xc                 S   s
   || _ d S r   r:  r6  r;   r;   r<   Z__set_x  s    z:ClassPropertiesAndMethods.test_compattr.<locals>.C.__set_xc                 S   s   | ` d S r   r:  rx   r;   r;   r<   Z
__delete_x  s    z=ClassPropertiesAndMethods.test_compattr.<locals>.C.__delete_xN)
r   r   r   r  r9  r0   Z	_C__get_xZ	_C__set_xZ_C__delete_xr7  r;   r;   r;   r<   r     s   r   r   re   r      r7  )r  rB   r7  r   r   r;   r;   r<   test_compattr  s    z'ClassPropertiesAndMethods.test_compattrc                 C   sh   G dd dt }| }| |jd | |j| G dd d|}| }| |jd | |j| d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z2ClassPropertiesAndMethods.test_newslots.<locals>.Cc                 S   s   t | }d|_|S r   )r2   r   r   )r   r6   r;   r;   r<   r     s    
z:ClassPropertiesAndMethods.test_newslots.<locals>.C.__new__c                 S   s   | j d | _ d S )Nrf   r   rx   r;   r;   r<   r0     s    z;ClassPropertiesAndMethods.test_newslots.<locals>.C.__init__Nr   r   r   r   r0   r;   r;   r;   r<   r     s   r   rh   c                   @   s   e Zd ZdS )z2ClassPropertiesAndMethods.test_newslots.<locals>.DNr  r;   r;   r;   r<   r    s   r  )r2   rB   r   r   )r6   r   r?   r  rR   r;   r;   r<   test_newslots  s    z'ClassPropertiesAndMethods.test_newslotsc                 C   sz   |  ttj |  ttjd |  ttjt |  ttjt G dd dt}|  t| G dd dt}|  t| d S )Nr   c                   @   s   e Zd ZejZdS z1ClassPropertiesAndMethods.test_bad_new.<locals>.CN)r   r   r   r2   r   r;   r;   r;   r<   r     s   r   c                   @   s   e Zd ZejZdS rA  )r   r   r   r  r   r;   r;   r;   r<   r     s   )rg  r   r  r   r2   r   r;   r;   r<   test_bad_new  s    z&ClassPropertiesAndMethods.test_bad_newc                 C   s4  G dd dt }t | | tt j|d t |  | tt j| d G dd dt }t | t |d t |d | tt j|dd G dd dt }t | | tt j|d t |d t |dd G dd dt }t | | tt j|d t |d | tt j|dd d S )Nc                   @   s   e Zd ZdS )4ClassPropertiesAndMethods.test_object_new.<locals>.ANr  r;   r;   r;   r<   r    s   r  ru   c                   @   s   e Zd Zdd ZdS )rC  c                 S   s
   || _ d S r   r>  r6   r   r;   r;   r<   r0     s    =ClassPropertiesAndMethods.test_object_new.<locals>.A.__init__Nr  r;   r;   r;   r<   r    s   rh   c                   @   s   e Zd Zdd ZdS )rC  c                 S   s
   t | S r   r  r   r   r   r;   r;   r<   r     s    <ClassPropertiesAndMethods.test_object_new.<locals>.A.__new__Nr  r;   r;   r;   r<   r    s   c                   @   s   e Zd Zdd Zdd ZdS )rC  c                 S   s
   t | S r   rF  rG  r;   r;   r<   r     s    rH  c                 S   s
   || _ d S r   r>  rD  r;   r;   r<   r0   	  s    rE  Nr?  r;   r;   r;   r<   r    s   )r  r   rg  r   r0   r6   r  r;   r;   r<   test_object_new  s(    



z)ClassPropertiesAndMethods.test_object_newc                 C   s   G dd dt }| t| G dd d|}t $ tdt |d}W d    n1 s^0    Y  | |jd | |j	| |`
| t| |`
t $ tdt |d}W d    n1 s0    Y  | |jd | |j	| d S )Nc                   @   s   e Zd Zdd ZdS )z=ClassPropertiesAndMethods.test_restored_object_new.<locals>.Ac                 _   s   t d S r   AssertionError)r   r7   r8   r;   r;   r<   r     s    zEClassPropertiesAndMethods.test_restored_object_new.<locals>.A.__new__Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZejZdd ZdS )z=ClassPropertiesAndMethods.test_restored_object_new.<locals>.Bc                 S   s
   || _ d S r   r>  rD  r;   r;   r<   r0     s    zFClassPropertiesAndMethods.test_restored_object_new.<locals>.B.__init__N)r   r   r   r  r   r0   r;   r;   r;   r<   r#    s   r#  errorrh   )r  rg  rL  warningscatch_warningssimplefilterDeprecationWarningrB   r   r   r   )r6   r  r#  rR   r;   r;   r<   test_restored_object_new  s     
&
&z2ClassPropertiesAndMethods.test_restored_object_newc           	   	   C   sD  G dd dt }G dd d|}G dd d|}G dd d||}| | |t g | |j|t f | | ||t g | |j||t f | | ||t g | |j||t f | | ||||t g | |j||||t f | |  d G d	d
 d
t}G dd d|||||d}| |jt |||||f | |  d z:G dd dt}G dd dt |d}t |}d|d< W n ty   Y n0 | d z(G dd dt}G dd dt |d}W n ty   Y n0 | d z(G dd dt}G dd dt |d}W n ty4   Y n0 | d d S )Nc                   @   s   e Zd Zdd ZdS )z0ClassPropertiesAndMethods.test_altmro.<locals>.Ac                 S   s   dS r  r;   rx   r;   r;   r<   r  +  r   z2ClassPropertiesAndMethods.test_altmro.<locals>.A.fNr   r   r   r  r;   r;   r;   r<   r  *  s   r  c                   @   s   e Zd ZdS )z0ClassPropertiesAndMethods.test_altmro.<locals>.BNr  r;   r;   r;   r<   r#  ,  s   r#  c                   @   s   e Zd Zdd ZdS )z0ClassPropertiesAndMethods.test_altmro.<locals>.Cc                 S   s   dS r&  r;   rx   r;   r;   r<   r  /  r   z2ClassPropertiesAndMethods.test_altmro.<locals>.C.fNrS  r;   r;   r;   r<   r   .  s   r   c                   @   s   e Zd ZdS )z0ClassPropertiesAndMethods.test_altmro.<locals>.DNr  r;   r;   r;   r<   r  0  s   r  c                   @   s   e Zd Zdd ZdS )z?ClassPropertiesAndMethods.test_altmro.<locals>.PerverseMetaTypec                 S   s   t | }|  |S r   )rD   mroreverse)r   Lr;   r;   r<   rT  =  s    
zCClassPropertiesAndMethods.test_altmro.<locals>.PerverseMetaType.mroNr   r   r   rT  r;   r;   r;   r<   PerverseMetaType<  s   rX  c                   @   s   e Zd ZdS z0ClassPropertiesAndMethods.test_altmro.<locals>.XNr  r;   r;   r;   r<   rW  A  s   rW  r   c                   @   s   e Zd Zdd ZdS )9ClassPropertiesAndMethods.test_altmro.<locals>._metaclassc                 S   s
   | t tgS r   )r   r  rx   r;   r;   r<   rT  H  s    =ClassPropertiesAndMethods.test_altmro.<locals>._metaclass.mroNrW  r;   r;   r;   r<   r   G  s   r   c                   @   s   e Zd ZdS rY  r  r;   r;   r;   r<   rW  J  s   rv   ru   zdevious mro() return not caughtc                   @   s   e Zd Zdd ZdS )rZ  c                 S   s   dgS r   r;   rx   r;   r;   r<   rT  [  s    r[  NrW  r;   r;   r;   r<   r   Z  s   c                   @   s   e Zd ZdS rY  r  r;   r;   r;   r<   rW  ]  s   z!non-class mro() return not caughtc                   @   s   e Zd Zdd ZdS )rZ  c                 S   s   dS r   r;   rx   r;   r;   r<   rT  f  s    r[  NrW  r;   r;   r;   r<   r   e  s   c                   @   s   e Zd ZdS rY  r  r;   r;   r;   r<   rW  h  s   z$non-sequence mro() return not caught)	r  rB   rT  r  r  rD   r   r   r   )	r6   r  r#  r   r  rX  rW  r   r7  r;   r;   r<   test_altmro(  sJ    


z%ClassPropertiesAndMethods.test_altmroc                    s   G dd dt  G  fddd }| }| |jd d|_| |jd |`| |jd | |d d	 d
|d< | |jd |d= | |jd | |dd dtddf d|dd< | |jtdddf |dd= | |jtdd d S )Nc                   @   s   e Zd ZdZdS )z5ClassPropertiesAndMethods.test_overloading.<locals>.Bz<Intermediate class because object doesn't have a __setattr__Nr   r   r   r  r;   r;   r;   r<   r#  r  s   r#  c                       sD   e Zd Zdd Z fddZ fddZdd Zd	d
 Zdd ZdS )z5ClassPropertiesAndMethods.test_overloading.<locals>.Cc                 S   s   |dkrd|fS t d S )Nr   rE   r  ri  r;   r;   r<   r  v  s    zAClassPropertiesAndMethods.test_overloading.<locals>.C.__getattr__c                    s&   |dkr||f| _ n | ||S d S Nr   )r  rn  ro  r#  r;   r<   rn  {  s    zAClassPropertiesAndMethods.test_overloading.<locals>.C.__setattr__c                    s    |dkr|| _ n | |S d S r^  )rp  rq  ri  r_  r;   r<   rq    s    zAClassPropertiesAndMethods.test_overloading.<locals>.C.__delattr__c                 S   s   d|fS )Ngetitemr;   r   r;   r;   r<   rU     s    zAClassPropertiesAndMethods.test_overloading.<locals>.C.__getitem__c                 S   s   ||f| _ d S r   )setitem)r6   r   r   r;   r;   r<   ra     s    zAClassPropertiesAndMethods.test_overloading.<locals>.C.__setitem__c                 S   s
   || _ d S r   )delitemr   r;   r;   r<   __delitem__  s    zAClassPropertiesAndMethods.test_overloading.<locals>.C.__delitem__N)	r   r   r   r  rn  rq  rU   ra   rc  r;   r_  r;   r<   r   u  s   r   rs  r   )r   r   r   )r`  r      )r   rd  r   r   r`  )r  rB   r   r  rp  ra  rb  rX   r   r;   r_  r<   test_overloadingo  s$    
z*ClassPropertiesAndMethods.test_overloadingc                    s   G dd dt   d|  d G  fddd }|d}| | d | | d | | d G  fdddt }| | jj j | t j d	d	 d S )
Nc                   @   s   e Zd Zdd Zdd ZdS )z1ClassPropertiesAndMethods.test_methods.<locals>.Cc                 S   s
   || _ d S r   r7  r6  r;   r;   r<   r0     s    z:ClassPropertiesAndMethods.test_methods.<locals>.C.__init__c                 S   s   | j S r   rf  rx   r;   r;   r<   r     s    z5ClassPropertiesAndMethods.test_methods.<locals>.C.fooN)r   r   r   r0   r   r;   r;   r;   r<   r     s   r   re   c                       s   e Zd Z jZjZdS )z1ClassPropertiesAndMethods.test_methods.<locals>.DN)r   r   r   r   r  r  r;   r   c1r;   r<   r    s   r  rf   c                       s   e Zd Z jZdS )z1ClassPropertiesAndMethods.test_methods.<locals>.ENr   r;   r  r;   r<   r,    s   r,  r/  )
r  rB   r   r  r  r0  r   r   r  r  )r6   r  r'  r,  r;   rg  r<   test_methods  s    z&ClassPropertiesAndMethods.test_methodsz)testing error message from implementationc                 C   s   t j}d}| t}|  W d    n1 s00    Y  | |jjd | d}| t}|d W d    n1 sz0    Y  | |jjd | | t}|d W d    n1 s0    Y  | |jjd | d S )Nz*unbound method set.add() needs an argumentr   zBdescriptor 'add' for 'set' objects doesn't apply to a 'int' object)r0  r   rg  r   rB   r%  r7   r  )r6   Zset_addr(  r  r;   r;   r<   test_methods_in_c  s    $&(z+ClassPropertiesAndMethods.test_methods_in_cc                    s  dd }dd }dd }dd }d	d
 }dd }dd }d=dd}dd }	dd }
fdd}fdd}dd }dd }dt |t i fdt|t i fdt|t ||d fd!tj|t i fd"|	|t i fd#||td$i fd%|
|td&i fd'||t d(|ifd(||t d'|ifd)t|t i fd*t|t i fd+tj	|t i fd,tj
|t i fd,t|t i fd-tj|t i fd.t|t i fd/t|t i fg}G fd0d1d1t}G fd2d3d3t}G d4d5 d5t G  fd6d7d7t}|D ]\}}}}G d8d9 d9|}| D ]\}}t||| q t||| ||  g G d:d9 d9|}| D ]\}}t||| qJt|||| ||  d;g| G d<d9 d9|}| D ]\}}t||| qt|||   ||  qd S )>Nc                 S   s(   |  W d    n1 s0    Y  d S r   r;   )managerr;   r;   r<   run_context  s    zIClassPropertiesAndMethods.test_special_method_lookup.<locals>.run_contextc                 S   s   | S r   r;   rx   r;   r;   r<   iden  s    zBClassPropertiesAndMethods.test_special_method_lookup.<locals>.idenc                 S   s   dS )Ns   hellor;   rx   r;   r;   r<   r    s    zCClassPropertiesAndMethods.test_special_method_lookup.<locals>.helloc                 S   s   g S r   r;   rx   r;   r;   r<   	empty_seq  s    zGClassPropertiesAndMethods.test_special_method_lookup.<locals>.empty_seqc                 S   s   dS r   r;   rx   r;   r;   r<   zero  s    zBClassPropertiesAndMethods.test_special_method_lookup.<locals>.zeroc                 S   s   dS )N              ?r;   rx   r;   r;   r<   complex_num  s    zIClassPropertiesAndMethods.test_special_method_lookup.<locals>.complex_numc                 S   s   t d S r   )StopIterationrx   r;   r;   r<   r     s    zBClassPropertiesAndMethods.test_special_method_lookup.<locals>.stopc                 S   s   dS )NTr;   )r6   thingr;   r;   r<   return_true  s    zIClassPropertiesAndMethods.test_special_method_lookup.<locals>.return_truec                 S   s
   t t| S r   )r   r)   r   r;   r;   r<   do_isinstance  s    zKClassPropertiesAndMethods.test_special_method_lookup.<locals>.do_isinstancec                 S   s
   t t| S r   )r   r)   ru  r;   r;   r<   do_issubclass  s    zKClassPropertiesAndMethods.test_special_method_lookup.<locals>.do_issubclassc                    s*   G dd d| j t} | d d d S )Nc                   @   s   e Zd ZdS )z^ClassPropertiesAndMethods.test_special_method_lookup.<locals>.do_dict_missing.<locals>.DictSubNr  r;   r;   r;   r<   DictSub  s   rx  hirk   )r   r   rB   )Zcheckerrx  rx   r;   r<   do_dict_missing  s    zMClassPropertiesAndMethods.test_special_method_lookup.<locals>.do_dict_missingc                    s     |d dS )Nry  rk   )rB   )r  r   rx   r;   r<   some_number  s    zIClassPropertiesAndMethods.test_special_method_lookup.<locals>.some_numberc                  W   s   d S r   r;   r7   r;   r;   r<   swallow  r   zEClassPropertiesAndMethods.test_special_method_lookup.<locals>.swallowc                 S   s   dS Nr  r;   )r6   specr;   r;   r<   format_impl  s    zIClassPropertiesAndMethods.test_special_method_lookup.<locals>.format_impl	__bytes____reversed____length_hint__)r~   __next__
__sizeof____instancecheck____missing__r  __subclasscheck__rG   	__enter____exit____complex__
__format__	__floor__	__trunc____ceil____dir__	__round__c                       s(   e Zd ZfddZf fdd	ZdS )zEClassPropertiesAndMethods.test_special_method_lookup.<locals>.Checkerc                 S   s   | d| d S )Nz__getattr__ called with {0})r   formatr6   r  testr;   r;   r<   r    s    zQClassPropertiesAndMethods.test_special_method_lookup.<locals>.Checker.__getattr__c                    s$   | vr| d| t| |S )Nz __getattribute__ called with {0})r   r  r  rk  r  )okr;   r<   rk    s    zVClassPropertiesAndMethods.test_special_method_lookup.<locals>.Checker.__getattribute__Nr   r   r   r  rk  r;   )r  r6   r;   r<   Checker
  s   r  c                       s    e Zd Zdd Z fddZdS )zJClassPropertiesAndMethods.test_special_method_lookup.<locals>.SpecialDescrc                 S   s
   || _ d S r   )impl)r6   r  r;   r;   r<   r0     s    zSClassPropertiesAndMethods.test_special_method_lookup.<locals>.SpecialDescr.__init__c                    s     d | j||S r   )r|   r  r  r6   r   ownerrecordr;   r<   r    s    
zRClassPropertiesAndMethods.test_special_method_lookup.<locals>.SpecialDescr.__get__N)r   r   r   r0   r  r;   r  r;   r<   SpecialDescr  s   r  c                   @   s   e Zd ZdS )zIClassPropertiesAndMethods.test_special_method_lookup.<locals>.MyExceptionNr  r;   r;   r;   r<   MyException  s   r  c                       s   e Zd Z fddZdS )zFClassPropertiesAndMethods.test_special_method_lookup.<locals>.ErrDescrc                    s    d S r   r;   r  r  r;   r<   r    s    zNClassPropertiesAndMethods.test_special_method_lookup.<locals>.ErrDescr.__get__Nr   r   r   r  r;   r  r;   r<   ErrDescr  s   r  c                   @   s   e Zd ZdS z?ClassPropertiesAndMethods.test_special_method_lookup.<locals>.XNr  r;   r;   r;   r<   rW    s   rW  c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   rW  &  s   re   c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   rW  .  s   )N)r  r0  reversedr2   r   	getsizeofr   r  mathfloortruncr)   ceildirroundr  	Exceptionr3   r  rB   rg  )r6   rl  rm  r  rn  ro  rq  r   rt  rv  rw  rz  r{  r}  r  Zspecialsr  r  r  r9   ZrunnerZ	meth_implenvrW  r  r   r;   )r  r  r  r6   r<   test_special_method_lookup  sx    



z4ClassPropertiesAndMethods.test_special_method_lookupc                 C   s  G dd dt }| }| }| |  | t|t| t| t| | || | ||k | ||k | ||k | t|	dd | t|t
| | d| tdD ]}| || q| d| G dd dt }| }| }| |  | t|t| t| t| | || | || | ||k | ||k | t|	d	d | t|t
| | d| tdD ]}| || q| d| G d
d dt }|d}	|d}
|d}| |	 | |
  | t|	td | |	|	 | |	|
 | |	|	k | |	 |
 | |	|
k  | |	|
k | |
|	k | |
|	k | t|	d | t
|	d |td}| d| tdD ]}| || q| d| d S )Nc                   @   s   e Zd Zdd ZdS )z2ClassPropertiesAndMethods.test_specials.<locals>.Cc                 S   s$   d|  krdk rn n|S t d S Nr   r   
IndexErrorr   r;   r;   r<   rU   ;  s    z>ClassPropertiesAndMethods.test_specials.<locals>.C.__getitem__Nr   r;   r;   r;   r<   r   :  s   r   zC object at r   r   r   c                   @   s   e Zd Zdd ZdS )z2ClassPropertiesAndMethods.test_specials.<locals>.Dc                 S   s$   d|  krdk rn n|S t d S r  r  r   r;   r;   r<   rU   R  s    z>ClassPropertiesAndMethods.test_specials.<locals>.D.__getitem__Nr   r;   r;   r;   r<   r  Q  s   r  zD object at c                   @   sl   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S )z6ClassPropertiesAndMethods.test_specials.<locals>.Proxyc                 S   s
   || _ d S r   rf  r6  r;   r;   r<   r0   i  s    z?ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__init__c                 S   s
   | j   S r   rf  rx   r;   r;   r<   r   k  s    z?ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__bool__c                 S   s
   t | jS r   )hashr7  rx   r;   r;   r<   __hash__m  s    z?ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__hash__c                 S   s
   | j |kS r   rf  r   r;   r;   r<   r  o  s    z=ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__eq__c                 S   s
   | j |kS r   rf  r   r;   r;   r<   __ne__q  s    z=ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__ne__c                 S   s
   | j |kS r   rf  r   r;   r;   r<   __ge__s  s    z=ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__ge__c                 S   s
   | j |kS r   rf  r   r;   r;   r<   __gt__u  s    z=ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__gt__c                 S   s
   | j |kS r   rf  r   r;   r;   r<   __le__w  s    z=ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__le__c                 S   s
   | j |k S r   rf  r   r;   r;   r<   __lt__y  s    z=ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__lt__c                 S   s
   d| j  S )NzProxy:%srf  rx   r;   r;   r<   r   {  s    z>ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__str__c                 S   s
   d| j  S )Nz	Proxy(%r)rf  rx   r;   r;   r<   r   }  s    z?ClassPropertiesAndMethods.test_specials.<locals>.Proxy.__repr__c                 S   s
   || j v S r   rf  r  r;   r;   r<   rj     s    zCClassPropertiesAndMethods.test_specials.<locals>.Proxy.__contains__N)r   r   r   r0   r   r  r  r  r  r  r  r  r   r   rj   r;   r;   r;   r<   Proxyh  s   r  re   zProxy:0zProxy(0))r  r   r  idr  rB   r   ZassertGreaterEqualr  findr   assertNotInr   re  )r6   r   rh  c2r   r  r&  r'  r  Zp0Zp1Zp_1Zp10r;   r;   r<   test_specials5  sp    
z'ClassPropertiesAndMethods.test_specialsc           
   
   C   s   dd l }G dd dt}| }||}| | | ~t  | | d  ~G dd dt}| }z|| W n4 ty } z| dt| W Y d }~nd }~0 0 | 	d G dd	 d	t}| }	||	}| | |	 ~	t  | | d  ~d S )
Nr   c                   @   s   e Zd ZdS )z2ClassPropertiesAndMethods.test_weakrefs.<locals>.CNr  r;   r;   r;   r<   r     s   r   c                   @   s   e Zd ZdgZdS )z7ClassPropertiesAndMethods.test_weakrefs.<locals>.NoWeakr   Nr  r;   r;   r;   r<   NoWeak  s   r  zweak referencez!weakref.ref(no) should be illegalc                   @   s   e Zd ZddgZdS )z5ClassPropertiesAndMethods.test_weakrefs.<locals>.Weakr   r  Nr  r;   r;   r;   r<   Weak  s   r  )
weakrefr  refrB   r   r  r   re  r  r   )
r6   r  r   rW   rr  nor  r  Zyesr;   r;   r<   test_weakrefs  s0    
&

z'ClassPropertiesAndMethods.test_weakrefsc           
      C   s  G dd dt }| }| |d d|_| |jd | |jd |`| |d | |d |j|d | |j|d |j| | |d |jd }| 	|t
 t|}| d| | d| | d	| | d
| | |jd | |j|jd  | |j|jd  | |j|jd  dD ]v}zt||d W nP ty } z6t|ddk r| d|t|f  W Y d }~nd }~0 0 | d|  q6d|_| |jd G dd dt }| }z|D ]}	t|	 qW n ty   Y n0 | d d S )Nc                   @   s4   e Zd Zdd Zdd Zdd ZeeeeddZd	S )
z4ClassPropertiesAndMethods.test_properties.<locals>.Cc                 S   s   | j S r   r:  rx   r;   r;   r<   getx  s    z9ClassPropertiesAndMethods.test_properties.<locals>.C.getxc                 S   s
   || _ d S r   r:  r  r;   r;   r<   setx  s    z9ClassPropertiesAndMethods.test_properties.<locals>.C.setxc                 S   s   | ` d S r   r:  rx   r;   r;   r<   delx  s    z9ClassPropertiesAndMethods.test_properties.<locals>.C.delxI'm the x property.docN)r   r   r   r  r  r  r-  r7  r;   r;   r;   r<   r     s   r   r7  r   r;  r   r  fgetfsetfdelr  r  r  r  )r  r  r  readonlyr   zQwhen setting readonly attr %r on a property, got unexpected AttributeError msg %rzIexpected AttributeError from trying to set readonly %r attr on a propertyc                   @   s   e Zd Zedd ZdS )z4ClassPropertiesAndMethods.test_properties.<locals>.Dc                 S   s   dd S r   r;   )r  r;   r;   r<   r    r   z=ClassPropertiesAndMethods.test_properties.<locals>.D.<lambda>N)r   r   r   r-  rU   r;   r;   r;   r<   r    s   r  z,expected ZeroDivisionError from bad property)r  r   r7  rB   r;  r  r  r8  rF   r   r-  r  re  r  r   r  r  r  r  r  r  r  r   ZeroDivisionError)
r6   r   r?   rawattrsr  r  r  rJ   r   r;   r;   r<   test_properties  sZ    


z)ClassPropertiesAndMethods.test_propertiesrf   z)Docstrings are omitted with -O2 and abovec                    s   G  fdddt }d S )Nc                       sJ   e Zd Zdd Zdd ZeeZ ejd eedZ	 e	jd dS )z?ClassPropertiesAndMethods.test_properties_doc_attrib.<locals>.Ec                 S   s   dS )getter methodr   r;   rx   r;   r;   r<   getter  s    zFClassPropertiesAndMethods.test_properties_doc_attrib.<locals>.E.getterc                 S   s   dS )zsetter methodNr;   )r  r   r;   r;   r<   setter  s    zFClassPropertiesAndMethods.test_properties_doc_attrib.<locals>.E.setterr  )r  N)
r   r   r   r  r  r-  ZproprB   r  Zprop2r;   rx   r;   r<   r,    s   
r,  r  )r6   r,  r;   rx   r<   test_properties_doc_attrib  s    z4ClassPropertiesAndMethods.test_properties_doc_attribc                    s8   zdd l  W n ty   Y n0 G  fdddt}d S )Nr   c                       s   e Zd Ze jZdS )z>ClassPropertiesAndMethods.test_testcapi_no_segfault.<locals>.XN)r   r   r   r-  Ztest_with_docstringpr;   	_testcapir;   r<   rW  	  s   rW  )r  ImportErrorr  r6   rW  r;   r  r<   test_testcapi_no_segfault	  s
    z3ClassPropertiesAndMethods.test_testcapi_no_segfaultc                    s  G dd dt    }|  jjd | |d d|_| |d | |jd | |jd |`| |d | |d G  fdd	d	 }| }d
|_| |jd
 |`|`G dd dt  }d|_| |jd |`G fddd}| }d|_| |jd |`d S )Nc                   @   s@   e Zd ZeddZejdd Zejdd Zejdd ZdS )z9ClassPropertiesAndMethods.test_properties_plus.<locals>.Cr  r  c                 S   s   | j S r   _foorx   r;   r;   r<   r   	  s    z=ClassPropertiesAndMethods.test_properties_plus.<locals>.C.fooc                 S   s   t || _d S r   r'   r  r  r;   r;   r<   r   	  s    c                 S   s   | ` d S r   r  rx   r;   r;   r<   r   	  s    N)r   r   r   r-  r   r  r  deleterr;   r;   r;   r<   r   	  s   


r   r  r   ir  r   c                       s   e Zd Z jjdd ZdS )z9ClassPropertiesAndMethods.test_properties_plus.<locals>.Dc                 S   s    z| ` W n ty   Y n0 d S r   )r  r  rx   r;   r;   r<   r   '	  s    z=ClassPropertiesAndMethods.test_properties_plus.<locals>.D.fooN)r   r   r   r   r  r;   r  r;   r<   r  &	  s   r  r   c                   @   sD   e Zd Zedd Zejdd Zejdd ZejdddZdS )z9ClassPropertiesAndMethods.test_properties_plus.<locals>.Ec                 S   s   | j S r   r  rx   r;   r;   r<   r   4	  s    z=ClassPropertiesAndMethods.test_properties_plus.<locals>.E.fooc                 S   s   t d S r   )RuntimeErrorr  r;   r;   r<   r   7	  s    c                 S   s   t || _d S r   r  r  r;   r;   r<   r   :	  s    Nc                 S   s   | ` d S r   r  r  r;   r;   r<   r   =	  s    )N)r   r   r   r-  r   r  r  r;   r;   r;   r<   r,  3	  s   


r,  c                       s*   e Zd Z jjdd Zejdd ZdS )z9ClassPropertiesAndMethods.test_properties_plus.<locals>.Fc                 S   s   | ` d S r   r  rx   r;   r;   r<   r   G	  s    z=ClassPropertiesAndMethods.test_properties_plus.<locals>.F.fooc                 S   s   t d|| _d S r   )maxr  r  r;   r;   r<   r   J	  s    N)r   r   r   r   r  r  r;   )r,  r;   r<   rc  F	  s   
rc  r   )r  rB   r   r  r   r   r  )r6   rW   r  rJ   r  rc  r  r;   )r   r,  r<   test_properties_plus	  s6    z.ClassPropertiesAndMethods.test_properties_plusc              	   C   s  t  }| |i  t i }| |i  t ddd}| |ddd | |t t|  | |t t|  t ddd}| |t ddd | |t f i | | |t ddidd | |t dgdd	 | |t d
dgfi | | |t f i | dddddgdfD ]b}zt | W n@ tyD   Y n< typ   |dkr^n| d|  Y n0 | d|  q zt i i  W n ty   Y n0 | d G dd d}zt |  W n ty   Y n0 | d dd |_dd |_	t | }| ||j  G dd d}t |dd|dd|dd|ddg}| |ddd t t
tdtdd }| |t d!d" tdD  d#gd$gfD ]6}zt | W n ty   Y n0 | d%|  qd S )&Nrf   rR   )re   r?   re   )onetwor  )r  )r  rf   )r  )r  r   )r  r   r   y                0r   zno TypeError from dict(%r)zno TypeError from dict({}, {})c                   @   s   e Zd ZddddZdS )zAClassPropertiesAndMethods.test_dict_constructors.<locals>.Mappingrf   rk   rp  )re   rh   r?   N)r   r   r   r   r;   r;   r;   r<   Mapping{	  s   r  z*no TypeError from dict(incomplete mapping)c                 S   s   t | j S r   )r2   r   r{   rx   r;   r;   r<   r  	  r   zBClassPropertiesAndMethods.test_dict_constructors.<locals>.<lambda>c                 S   s
   | j | S r   )r   r   r;   r;   r<   r  	  r   c                   @   s   e Zd Zdd Zdd ZdS )zJClassPropertiesAndMethods.test_dict_constructors.<locals>.AddressBookEntryc                 S   s   || _ || _d S r   )firstlast)r6   r  r  r;   r;   r<   r0   	  s    zSClassPropertiesAndMethods.test_dict_constructors.<locals>.AddressBookEntry.__init__c                 S   s   t | j| jgS r   )r}   r  r  rx   r;   r;   r<   r~   	  s    zSClassPropertiesAndMethods.test_dict_constructors.<locals>.AddressBookEntry.__iter__N)r   r   r   r0   r~   r;   r;   r;   r<   AddressBookEntry	  s   r  TimZWarsawBarryZPeters)r  r  rk   ru   c                 S   s   g | ]}||d  fqS r*  r;   r|  r;   r;   r<   r~  	  r   zDClassPropertiesAndMethods.test_dict_constructors.<locals>.<listcomp>)Ztooshort)Ztoolongzby 1zno ValueError from dict(%r))r   rB   r2   r3   r}   r   
ValueErrorr   r{   rU   zipr   )r6   rJ   Zbadargr  r  Zbadr;   r;   r<   test_dict_constructorsR	  sn    






z0ClassPropertiesAndMethods.test_dict_constructorsc                    s@  d}|  t ddg ~dddddgddd	ddit| jfD ]}t| q:d
d }G dd dt}ddg}|  |t|| | }|  |t|| d|_dd |_|  |t||ddg  G dd d|}ddg| }|  |t|| | }	|  |t|	| d|	_dd |	_|  |t|	|ddg  G dd dtt	}
|
d}d|_
d|_g d fd!d"t|D }|  |d#d$g G d%d& d&|
}|d'}d|_
d|_|  |jd( | t t| W d    n1 s0    Y  |  tt tt G  fd)d*d*t G  fd+ddt}t|  d S ),Nr   junkr6   rf   y               @g       @2   2rf   c                 S   s   dd | D S )Nc                 S   s   g | ]}| d s|qS )r  )r  )r}  r  r;   r;   r<   r~  	  r   zKClassPropertiesAndMethods.test_dir.<locals>.interesting.<locals>.<listcomp>r;   )stringsr;   r;   r<   interesting	  s    z7ClassPropertiesAndMethods.test_dir.<locals>.interestingc                   @   s   e Zd ZdZdd ZdS )-ClassPropertiesAndMethods.test_dir.<locals>.Cre   c                 S   s   d S r   r;   rx   r;   r;   r<   Cmethod	  r   z5ClassPropertiesAndMethods.test_dir.<locals>.C.CmethodN)r   r   r   Cdatar  r;   r;   r;   r<   r   	  s   r   r  r  c                 S   s   dS r   r;   rx   r;   r;   r<   r  	  r   z4ClassPropertiesAndMethods.test_dir.<locals>.<lambda>cdatacmethodc                   @   s   e Zd ZdZdd ZdS )z-ClassPropertiesAndMethods.test_dir.<locals>.Are   c                 S   s   d S r   r;   rx   r;   r;   r<   Amethod	  r   z5ClassPropertiesAndMethods.test_dir.<locals>.A.AmethodN)r   r   r   Adatar   r;   r;   r;   r<   r  	  s   r  r  r   r   c                 S   s   dS )Nrh   r;   rx   r;   r;   r<   r  	  r   adataamethodc                   @   s   e Zd ZdS )z-ClassPropertiesAndMethods.test_dir.<locals>.MNr  r;   r;   r;   r<   M	  s   r  rL   re   )r   r  __package__
__loader____spec__c                    s   g | ]}| vr|qS r;   r;   r}  r7  )default_attributesr;   r<   r~  	  r   z6ClassPropertiesAndMethods.test_dir.<locals>.<listcomp>r?   rR   c                   @   s   e Zd Zdd ZeeZdS )z.ClassPropertiesAndMethods.test_dir.<locals>.M2c                 S   s   dS )NNot a dict!r;   rx   r;   r;   r<   getdict	  s    z6ClassPropertiesAndMethods.test_dir.<locals>.M2.getdictN)r   r   r   r  r-  rF   r;   r;   r;   r<   r  	  s   r  Zm2r
  c                       s<   e Zd Zdd Zdd Z fddZdd Z fd	d
ZdS )z3ClassPropertiesAndMethods.test_dir.<locals>.Wrapperc                 S   s
   || _ d S r   _Wrapper__objr7  r;   r;   r<   r0   	  s    z<ClassPropertiesAndMethods.test_dir.<locals>.Wrapper.__init__c                 S   s   dt | j S )NzWrapper(%s))r   r  rx   r;   r;   r<   r   	  s    z<ClassPropertiesAndMethods.test_dir.<locals>.Wrapper.__repr__c                    s    | j | S r   r  r   Wrapperr;   r<   rU   	  s    z?ClassPropertiesAndMethods.test_dir.<locals>.Wrapper.__getitem__c                 S   s
   t | jS r   )r   r  rx   r;   r;   r<   r>   	  s    z;ClassPropertiesAndMethods.test_dir.<locals>.Wrapper.__len__c                    s    t | j|S r   )rE   r  ri  r  r;   r<   r  	  s    z?ClassPropertiesAndMethods.test_dir.<locals>.Wrapper.__getattr__N)r   r   r   r0   r   rU   r>   r  r;   r  r;   r<   r  	  s
   r  c                       s    e Zd Z fddZeeZdS )r  c                    s    t | S r   r{  rx   r  r;   r<   Z
__getclass	  s    z8ClassPropertiesAndMethods.test_dir.<locals>.C.__getclassN)r   r   r   Z_C__getclassr-  r   r;   r  r;   r<   r   	  s   )rB   r  rD   test_dirr  r  r  r  r  r   rR   r?   rF   rg  r   Ellipsis)r6   r  r  r  r   ZcstuffrW   r  Zastuffr?   r  Z	minstancenamesr  Z
m2instancer;   )r  r	  r<   r  	  sP    &


(z"ClassPropertiesAndMethods.test_dirc                    s  G dd dt }| | dd G  fddd| |   dd G d	d
 d
|}t||_| | dd G fddd| |  dd G fdddtG fddd|  dd G dd d}||_| | dd ztd W n ty2   Y n0 | d zt|  W n tyb   Y n0 | d ztd W n ty   Y n0 | d zt|  W n ty   Y n0 | d  G d!d" d"t }G d#d$ d$|}| }| |j	d% | t||j	d G d&d' d't }G fd(d)d)|| 
 |j | t t|dd* W d    n1 s0    Y  d S )+Nc                   @   s   e Zd Zdd ZdS )z0ClassPropertiesAndMethods.test_supers.<locals>.Ac                 S   s   d| S )NzA(%r)r;   r6   r?   r;   r;   r<   rI   
  s    z5ClassPropertiesAndMethods.test_supers.<locals>.A.methNr   r;   r;   r;   r<   r  
  s   r  re   zA(1)c                       s&   e Zd Z fddZdd Z  ZS )z0ClassPropertiesAndMethods.test_supers.<locals>.Bc                    s   t  | | _d S r   )r  r%  rx   )r#  r   r;   r<   r0   
  s    z9ClassPropertiesAndMethods.test_supers.<locals>.B.__init__c                 S   s   d| | j | S )NzB(%r)r$  r  r;   r;   r<   rI   
  s    z5ClassPropertiesAndMethods.test_supers.<locals>.B.meth)r   r   r   r0   rI   r  r;   r_  r  r<   r#  

  s   r#  rf   zB(2)A(2)c                   @   s   e Zd Zdd ZdS )z0ClassPropertiesAndMethods.test_supers.<locals>.Cc                 S   s   d| | j | S )NzC(%r)r'  r  r;   r;   r<   rI   
  s    z5ClassPropertiesAndMethods.test_supers.<locals>.C.methNr   r;   r;   r;   r<   r   
  s   r   rh   zC(3)A(3)c                       s   e Zd Z fddZ  ZS )z0ClassPropertiesAndMethods.test_supers.<locals>.Dc                    s   d| t  | | S )NzD(%r))r  rI   r  )r  r   r;   r<   rI   
  s    z5ClassPropertiesAndMethods.test_supers.<locals>.D.meth)r   r   r   rI   r  r;   r  r  r<   r  
  s   r  rk   zD(4)C(4)B(4)A(4)c                       s   e Zd Z fddZ  ZS )z6ClassPropertiesAndMethods.test_supers.<locals>.mysuperc                    s   t | j| S r   r  r=  )r   mysuperr;   r<   r0   "
  s    z?ClassPropertiesAndMethods.test_supers.<locals>.mysuper.__init__)r   r   r   r0   r  r;   )r  r  r<   r  !
  s   r  c                       s   e Zd Z fddZdS )z0ClassPropertiesAndMethods.test_supers.<locals>.Ec                    s   d|  |  | S )NzE(%r))rI   r  r,  r  r;   r<   rI   &
  s    z5ClassPropertiesAndMethods.test_supers.<locals>.E.methNr   r;   r  r;   r<   r,  %
  s   r,  ru   zE(5)D(5)C(5)B(5)A(5)c                   @   s   e Zd Zdd ZdS )z0ClassPropertiesAndMethods.test_supers.<locals>.Fc                 S   s    | j }d||jjf || S )Nz	F(%r)[%s])	_F__superr   r   rI   )r6   r?   r  r;   r;   r<   rI   ,
  s    z5ClassPropertiesAndMethods.test_supers.<locals>.F.methNr   r;   r;   r;   r<   rc  +
  s   rc  rv   z!F(6)[mysuper]E(6)D(6)C(6)B(6)A(6)r   zshouldn't allow super(D, 42)zshouldn't allow super(D, C())r   z$shouldn't allow super(D).__get__(12)z%shouldn't allow super(D).__get__(C())c                   @   s   e Zd Zdd ZeeZdS )z5ClassPropertiesAndMethods.test_supers.<locals>.DDbasec                 S   s   dS r  r;   rx   r;   r;   r<   r  U
  r   z:ClassPropertiesAndMethods.test_supers.<locals>.DDbase.getxNr   r   r   r  r-  r7  r;   r;   r;   r<   DDbaseT
  s   r  c                   @   s   e Zd Zdd ZeeZdS )z4ClassPropertiesAndMethods.test_supers.<locals>.DDsubc                 S   s   dS r~  r;   rx   r;   r;   r<   r  Y
  r   z9ClassPropertiesAndMethods.test_supers.<locals>.DDsub.getxNr  r;   r;   r;   r<   DDsubX
  s   r  r  c                   @   s   e Zd Zedd ZdS )z3ClassPropertiesAndMethods.test_supers.<locals>.Basec                 S   s   dS r^  r;   rx   r;   r;   r<   r  d
  r   z<ClassPropertiesAndMethods.test_supers.<locals>.Base.<lambda>N)r   r   r   r-  aPropr;   r;   r;   r<   Basec
  s   r  c                       s"   e Zd Ze fddZ  ZS )z2ClassPropertiesAndMethods.test_supers.<locals>.Subc                    s   t  | jS r   )r  r  )klass)Subr   r;   r<   r  g
  s    z7ClassPropertiesAndMethods.test_supers.<locals>.Sub.test)r   r   r   rL  r  r  r;   )r  r  r<   r  f
  s   r  r  )r  rB   rI   r  r(  r  r   r   r  r7  r  r  rg  )r6   r  r   rc  r  r  ddr  r  )r#  r  r,  r  r  r<   test_supers
  sZ    





z%ClassPropertiesAndMethods.test_supersc                    s   G  fdddt  | t dd d | t dd d  d}| |d | t |d | t |jt  | t|td | |
 jt  | |d	? jt  | |d	> jt  |  d	d
> jt  |  d	d
? jt  G fdddt | tdd d | tdd d d}| |d | t |d | t|td | t |jt  | |
 jt  | | jt  | d	 jt  | |d	? jt  | |d	> jt  | |d	 jt  | |d jt  | |d jt  | |d jt  | d| jt  | |d	B jt  | |d	A jt  | |d@ jt  | d	d
> jt  | d	d
? jt  | td	jt  G dd dt }|d}| |d	 jt  | d	| jt  |d}| |ji  | t |d G dd dt	}| t|dd |d}| |d | t	|d | t	|jt	 | t|td | |
 jt	 G dd dt
}|dd}| t|d t
dd}| |jt
 | || | t
|| | t
|jt
 ||}| t|d | || | t
|| | t
|jt
 | t|t| | |
 jt
 | |d	 jt
 | |d	 | | |d	 jt
 | |d	 | | |d jt
 | |d | | |d jt
 | |d | G d d! d!t}|d"}| |d" | | |d# | |  |d" td$D ].}|t|}| }	|	 }
| |
| q@|d%}| t|d% | t|jt | t|td% | |d d  jt | |d jt | |d	 jt | |d& jt |d&}| t|d& | t|jt | || jt | |d	 jt | |d jt | |d' jt | |d d  jt G d(d) d)t}|d*}| |d* | | |d+ | |  |d* td,D ]:}|d-ttt|}| }| }	| |	| q|d.}| t|d. | t|jt d/}||}| || | t|| | t|jt | t|t| | |di| d | |di| d | |d- jt | |d- | | d-| jt | d-| | | |d	 jt | |d	 d- | |d jt | |d | | |d' jt | |d' ||  | |d d  jt | |d d  | | |d	d	 jt | |d	d	 d- | | jt | | | | | jt | | | | | jt | | | i }| ||jt | ||| | |d0d0jt | |d0d0| | |t|jt | |t|| | |t|jt | |t|| | |t|jt | |t|| | | jt | | | G d1d2 d2t}|d3}	| |	d3 | |	 |d4 | |	  |d3 d.}||}	| t|	| | t|	jt | t|	t| | |	di| d | |di|	 d | |	 jt | |	 | | |	 jt | |	 | | |	 jt | |	 | | |	d0d0jt | |	d0d0| | |	d5d5jt | |	d5d5| | |	t|	jt | |	t|	| | |	t|	jt | |	t|	| | |	t|	jt | |	t|	| | |	 jt | |	 | | |	 jt | |	 | | |	 jt | |	 | | |	 jt | |	 | | |	d- jt | |	d- | | d-|	 jt | d-|	 | | |	d	 jt | |	d	 d- | |	d jt | |	d | | |	d' jt | |	d' ||  | |	d d  jt | |	d d  | | |	d	d	 jt | |	d	d	 d- G d6d7 d7t}|td}| |ttd |d8 | |ttdd8g  d|d< | |ttd9 | td9d: | |ttd: g |d;d < | |ttd< |d=d<= | t|d= | |ttd= | t|ttd= | |d	 d	 | |d d | |d> d	 | |d d | |d d ttd d S )?Nc                       s    e Zd Zdd Z fddZdS )z@ClassPropertiesAndMethods.test_basic_inheritance.<locals>.hexintc                 S   s   t | S r   )hexrx   r;   r;   r<   r   u
  s    zIClassPropertiesAndMethods.test_basic_inheritance.<locals>.hexint.__repr__c                    s    t | |S r   )r)   rP   r   hexintr;   r<   rP   w
  s    zHClassPropertiesAndMethods.test_basic_inheritance.<locals>.hexint.__add__N)r   r   r   r   rP   r;   r"  r;   r<   r#  t
  s   r#     	   Z0x10i  Z0x3efi90  r   r   c                       s.   e Zd Zg Zdd Z fddZeZ  ZS )zAClassPropertiesAndMethods.test_basic_inheritance.<locals>.octlongc                 S   s   t | S r   )octrx   r;   r;   r<   r   
  s    zIClassPropertiesAndMethods.test_basic_inheritance.<locals>.octlong.__str__c                    s   |  t| |S r   )r   r  rP   r   )r   octlongr;   r<   rP   
  s    zIClassPropertiesAndMethods.test_basic_inheritance.<locals>.octlong.__add__)r   r   r   r   r   rP   r   r  r;   )r'  r  r<   r'  
  s   r'  rh   ru   Z0o10i  Z0o5675re   r   c                   @   s   e Zd ZdS )zCClassPropertiesAndMethods.test_basic_inheritance.<locals>.longcloneNr  r;   r;   r;   r<   	longclone
  s   r(  c                   @   s$   e Zd ZdgZd	ddZdd ZdS )
zCClassPropertiesAndMethods.test_basic_inheritance.<locals>.precfloatr   r   r   c                 S   s   t || _d S r   )r)   r   )r6   r   r   r;   r;   r<   r0   
  s    zLClassPropertiesAndMethods.test_basic_inheritance.<locals>.precfloat.__init__c                 S   s   d| j | f S )Nr   r   rx   r;   r;   r<   r   
  s    zLClassPropertiesAndMethods.test_basic_inheritance.<locals>.precfloat.__repr__N)r   r   )r   r   r   r   r0   r   r;   r;   r;   r<   	precfloat
  s   
r)  g?z1.1g    @c                   @   s   e Zd Zdd ZdS )zDClassPropertiesAndMethods.test_basic_inheritance.<locals>.madcomplexc                 S   s   d| j | jf S )Nz%.17gj%+.17gr   r   rx   r;   r;   r<   r   
  s    zMClassPropertiesAndMethods.test_basic_inheritance.<locals>.madcomplex.__repr__N)r   r   r   r   r;   r;   r;   r<   
madcomplex
  s   r+  rk   z4j-3c                   @   s   e Zd ZdZdd ZdS )zBClassPropertiesAndMethods.test_basic_inheritance.<locals>.madtupleNc                 S   s2   | j d ur| j S t| }|  | || _ | j S r   )_revr2   rU  r   r6   rV  r;   r;   r<   rev
  s    
zFClassPropertiesAndMethods.test_basic_inheritance.<locals>.madtuple.revr   r   r   r-  r/  r;   r;   r;   r<   madtuple
  s   r1  )
re   rf   rh   rk   ru   rv   r$     r%  r   )
r   r%  r2  r$  rv   ru   rk   rh   rf   re   i   )re   rf   rh   rk   ru   r;   rf   c                   @   s   e Zd ZdZdd ZdS )zCClassPropertiesAndMethods.test_basic_inheritance.<locals>.madstringNc                 S   s8   | j d ur| j S t| }|  | d|| _ | j S Nr   r-  r2   rU  r   ru  r.  r;   r;   r<   r/    s    
zGClassPropertiesAndMethods.test_basic_inheritance.<locals>.madstring.revr0  r;   r;   r;   r<   	madstring  s   r5  abcdefghijklmnopqrstuvwxyzZzyxwvutsrqponmlkjihgfedcba   r   Z12345z     r7  c                   @   s   e Zd ZdZdd ZdS )zDClassPropertiesAndMethods.test_basic_inheritance.<locals>.madunicodeNc                 S   s8   | j d ur| j S t| }|  | d|| _ | j S r3  r4  r.  r;   r;   r<   r/  C  s    
zHClassPropertiesAndMethods.test_basic_inheritance.<locals>.madunicode.revr0  r;   r;   r;   r<   
madunicodeA  s   r8  ZABCDEFZFEDCBAZxyc                   @   s   e Zd ZdS )zAClassPropertiesAndMethods.test_basic_inheritance.<locals>.sublistNr  r;   r;   r;   r<   sublist|  s   r9  r  rv         r   r  )!r)   rB   r   r   r   r  r  r'   rF   r*   r   r  r/  r   ru  mapr  striplstriprstrip	translatereplaceljustr   rjustcenterlowerupper
capitalizetitler2   r|   r   )r6   r?   r(  r)  r+  baser1  r   rK   r  r   r5  r  Zidentitytabr8  r9  r;   )r#  r'  r<   test_basic_inheritanceq
  s   

			

z0ClassPropertiesAndMethods.test_basic_inheritancec              	   C   s  |  td tdd W d    n1 s,0    Y  |  td tdd W d    n1 sb0    Y  |  td tdd W d    n1 s0    Y  | tdddtdd | tdd	d
 | tdddd |  td tt	dd W d    n1 s0    Y  |  td t
dd W d    n1 sL0    Y  tttttttt
fD ]8}z|dd W n ty   Y n0 | d|  qjd S )Nzkeyword argumentre   rf  rf   r   i  r*  i  r  500   abcstrict)r  errorsr  rh   )Zsequencer   )Zbogus_keyword_argz4expected TypeError from bogus keyword argument to %r)ZassertRaisesRegexr   r)   r*   boolrB   r   r  r  r   r2   r   )r6   constructorr;   r;   r<   test_keywords  s.    (((.*z'ClassPropertiesAndMethods.test_keywordsc                    s   G  fdddt  |  dd | d d | t  dd  dd dd	 d
di}| | d d | | d d	 | | d d |  d| | | dd d S )Nc                       s,   e Zd ZdZdd Z fddZdd ZdS )	zFClassPropertiesAndMethods.test_str_subclass_as_dict_key.<locals>.cistrzSubclass of str that computes __eq__ case-insensitively.

            Also computes a hash code of the string in canonical form.
            c                 S   s   |  | _t| j| _d S r   )rF  	canonicalr  hashcoder  r;   r;   r<   r0     s    
zOClassPropertiesAndMethods.test_str_subclass_as_dict_key.<locals>.cistr.__init__c                    s   t | s |}| j|jkS r   )r   rS  r   cistrr;   r<   r    s    
zMClassPropertiesAndMethods.test_str_subclass_as_dict_key.<locals>.cistr.__eq__c                 S   s   | j S r   )rT  rx   r;   r;   r<   r    s    zOClassPropertiesAndMethods.test_str_subclass_as_dict_key.<locals>.cistr.__hash__N)r   r   r   r  r0   r  r  r;   rU  r;   r<   rV    s   rV  ABCr  ZaBcr  re   r  rf   ZtHreerh   ZtWoZTHrEEZONeZthrEE)r  rB   re  r   )r6   rJ   r;   rU  r<   test_str_subclass_as_dict_key  s    z7ClassPropertiesAndMethods.test_str_subclass_as_dict_keyc           
         s   G dd d}|t tfD ]}G  fddd|  d} d} d}| |d |||d}dD ]}dD ]}d	D ]v}	| td
|	 td|	 d||f  | td|	 td|	 d||f  | td|	 td|	 d||f  qtqlqdqd S )Nc                   @   s   e Zd ZdS )zCClassPropertiesAndMethods.test_classic_comparisons.<locals>.classicNr  r;   r;   r;   r<   classic  s   rY  c                       s\   e Zd Zdd Z fddZ fddZ fddZ fd	d
Z fddZ fddZ	dS )z=ClassPropertiesAndMethods.test_classic_comparisons.<locals>.Cc                 S   s   t || _d S r   r)   r   r  r;   r;   r<   r0     s    zFClassPropertiesAndMethods.test_classic_comparisons.<locals>.C.__init__c                    s8   t | r| j|jkS t |ts*t |tr4| j|kS tS r   r   r   r)   r   r   r  r;   r<   r    s
    

zDClassPropertiesAndMethods.test_classic_comparisons.<locals>.C.__eq__c                    s8   t | r| j|jkS t |ts*t |tr4| j|kS tS r   r[  r   r  r;   r<   r    s
    

zDClassPropertiesAndMethods.test_classic_comparisons.<locals>.C.__ne__c                    s8   t | r| j|jk S t |ts*t |tr4| j|k S tS r   r[  r   r  r;   r<   r    s
    

zDClassPropertiesAndMethods.test_classic_comparisons.<locals>.C.__lt__c                    s8   t | r| j|jkS t |ts*t |tr4| j|kS tS r   r[  r   r  r;   r<   r    s
    

zDClassPropertiesAndMethods.test_classic_comparisons.<locals>.C.__le__c                    s8   t | r| j|jkS t |ts*t |tr4| j|kS tS r   r[  r   r  r;   r<   r    s
    

zDClassPropertiesAndMethods.test_classic_comparisons.<locals>.C.__gt__c                    s8   t | r| j|jkS t |ts*t |tr4| j|kS tS r   r[  r   r  r;   r<   r    s
    

zDClassPropertiesAndMethods.test_classic_comparisons.<locals>.C.__ge__N)
r   r   r   r0   r  r  r  r  r  r  r;   r  r;   r<   r     s   r   re   rf   rh   rg   r   r   r   r   r   r   c[x] %s c[y]x %s y
x=%d, y=%d	c[x] %s y	x %s c[y])r)   r  rB   rC   )
r6   rY  rJ  rh  r  c3rW   r7  yopr;   r  r<   test_classic_comparisons  s.    (





z2ClassPropertiesAndMethods.test_classic_comparisonsc                    sZ  G dd dt }|d}|d d| G dd dt }|d}|d d| G dd	 d	}|tttfD ]}G  fd
dd|  d} d} d}	|d |||	d}
dD ]}dD ]}dD ]v}td| td| d||f  td| td| d||f  td| td| d||f  qqqqzd S )Nc                   @   s   e Zd ZdS )z:ClassPropertiesAndMethods.test_rich_comparisons.<locals>.ZNr  r;   r;   r;   r<   rY  :  s   rY  re   y      ?        c                   @   s   e Zd Zdd ZdS )z;ClassPropertiesAndMethods.test_rich_comparisons.<locals>.ZZc                 S   s(   zt | | dkW S    t Y S 0 d S )Ngư>)r'   r   r   r;   r;   r<   r  @  s    zBClassPropertiesAndMethods.test_rich_comparisons.<locals>.ZZ.__eq__Nr  r;   r;   r;   r<   ZZ?  s   rf  gׇP  ?c                   @   s   e Zd ZdS )z@ClassPropertiesAndMethods.test_rich_comparisons.<locals>.classicNr  r;   r;   r;   r<   rY  I  s   rY  c                       sh   e Zd Zdd ZfddZ fddZ fddZ fd	d
Z fddZ fddZ	 fddZ
dS )z:ClassPropertiesAndMethods.test_rich_comparisons.<locals>.Cc                 S   s   t || _d S r   rZ  r  r;   r;   r<   r0   M  s    zCClassPropertiesAndMethods.test_rich_comparisons.<locals>.C.__init__c                    s     d d S )Nzshouldn't call __cmp__)r   )r  r   rx   r;   r<   __cmp__O  s    zBClassPropertiesAndMethods.test_rich_comparisons.<locals>.C.__cmp__c                    s8   t | r| j|jkS t |ts*t |tr4| j|kS tS r   r[  r   r  r;   r<   r  Q  s
    

zAClassPropertiesAndMethods.test_rich_comparisons.<locals>.C.__eq__c                    s8   t | r| j|jkS t |ts*t |tr4| j|kS tS r   r[  r   r  r;   r<   r  W  s
    

zAClassPropertiesAndMethods.test_rich_comparisons.<locals>.C.__ne__c                    s8   t | r| j|jk S t |ts*t |tr4| j|k S tS r   r[  r   r  r;   r<   r  ]  s
    

zAClassPropertiesAndMethods.test_rich_comparisons.<locals>.C.__lt__c                    s8   t | r| j|jkS t |ts*t |tr4| j|kS tS r   r[  r   r  r;   r<   r  c  s
    

zAClassPropertiesAndMethods.test_rich_comparisons.<locals>.C.__le__c                    s8   t | r| j|jkS t |ts*t |tr4| j|kS tS r   r[  r   r  r;   r<   r  i  s
    

zAClassPropertiesAndMethods.test_rich_comparisons.<locals>.C.__gt__c                    s8   t | r| j|jkS t |ts*t |tr4| j|kS tS r   r[  r   r  r;   r<   r  o  s
    

zAClassPropertiesAndMethods.test_rich_comparisons.<locals>.C.__ge__N)r   r   r   r0   rg  r  r  r  r  r  r  r;   r   r6   r;   r<   r   L  s   r   rf   rh   rg   r\  r]  r^  r_  r`  ra  )r   rB   r)   r  r2   rC   )r6   rY  r  rf  zzrY  rJ  rh  r  rb  rW   r7  rc  rd  r;   rh  r<   test_rich_comparisons8  s>    )





z/ClassPropertiesAndMethods.test_rich_comparisonsc                    s4   ddl m}  fdd}||jd |tjd d S )Nr   )FileIOc                    s     | j| d S r   )rB   r  )descrZwhatrx   r;   r<   check  s    z6ClassPropertiesAndMethods.test_descrdoc.<locals>.checkzTrue if the file is closedz!the real part of a complex number)_iork  closedr   r   )r6   rk  rm  r;   rx   r<   test_descrdoc  s    z'ClassPropertiesAndMethods.test_descrdocc                    sv   G dd dt  G  fddd}G  fdddt }| |jd | | jd | |jd	 | | jd
 d S )Nc                   @   s   e Zd Zdd ZdS )z?ClassPropertiesAndMethods.test_doc_descriptor.<locals>.DocDescrc                 S   s&   |r|j jd }|r|j}d||f S )Nz	 instancezobject=%s; type=%s)r   r   )r6   r  Zotyper;   r;   r<   r    s
    zGClassPropertiesAndMethods.test_doc_descriptor.<locals>.DocDescr.__get__Nr  r;   r;   r;   r<   DocDescr  s   rq  c                       s   e Zd Z  ZdS )z?ClassPropertiesAndMethods.test_doc_descriptor.<locals>.OldClassNr]  r;   rq  r;   r<   OldClass  s   rs  c                       s   e Zd Z  ZdS )z?ClassPropertiesAndMethods.test_doc_descriptor.<locals>.NewClassNr]  r;   rr  r;   r<   NewClass  s   rt  zobject=None; type=OldClassz'object=OldClass instance; type=OldClasszobject=None; type=NewClassz'object=NewClass instance; type=NewClass)r  rB   r  )r6   rs  rt  r;   rr  r<   test_doc_descriptor  s    z-ClassPropertiesAndMethods.test_doc_descriptorc                    s  G dd dt }G dd dt }G dd dt }G dd d||}||||fD ]D}||||fD ]2}| }||_|j| ||_|j| q^qNfd	d
}|| t |t | || d || t  |t  t |t t  G dd dt}	|dt |dt t  }
||
td ||
td  ~
G dd dt }G dd dt }G dd dt }G dd dt }G dd dt }G dd d|}G dd d|}G dd d|}G d d! d!|}G d"d# d#|}G d$d% d%|}||f||f||f||f||ffD ]n\}}| }d|_||_|j|d&||f  |jd ||_|j|d&||f  |jd q||||||||t|	f
D ]@}||||||||t|	f
D ] }||u rq|| | qqG d'd( d(t G fd)d*d*t   fd+d,t	d-D }~d S ).Nc                   @   s   e Zd ZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.CNr  r;   r;   r;   r<   r     r   r   c                   @   s   e Zd ZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.DNr  r;   r;   r;   r<   r    r   r  c                   @   s   e Zd ZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.ENr  r;   r;   r;   r<   r,    r   r,  c                   @   s   e Zd ZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.FNr  r;   r;   r;   r<   rc    r   rc  c              	      sh   z
|| _ W n ty   Y n0  d| |f  zt| d W n ttfyT   Y n0  d|   d S )Nz!shouldn't allow %r.__class__ = %rr   z shouldn't allow del %r.__class__)r   r   r   rp  r  )r7  r   rx   r;   r<   cant  s    
z6ClassPropertiesAndMethods.test_set_class.<locals>.cantre   c                   @   s   e Zd Zg ZdS )z5ClassPropertiesAndMethods.test_set_class.<locals>.IntNr  r;   r;   r;   r<   Int  r   rw  Trf   c                   @   s   e Zd ZddgZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.Gr?   rR   Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZddgZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.HrR   r?   Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZddgZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.Ir?   rR   Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZddgZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.JrW   rR   Nr  r;   r;   r;   r<   J  s   rx  c                   @   s   e Zd Zg dZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.K)r?   rR   rJ   Nr  r;   r;   r;   r<   K  s   ry  c                   @   s   e Zd ZdgZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.Lr  Nr  r;   r;   r;   r<   rV    s   rV  c                   @   s   e Zd ZdgZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.Mr  Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdgZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.Nr  Nr  r;   r;   r;   r<   r     s   r   c                   @   s   e Zd ZdgZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.PrF   Nr  r;   r;   r;   r<   P  s   rz  c                   @   s   e Zd ZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.QNr  r;   r;   r;   r<   Q  s   r{  c                   @   s   e Zd ZddgZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.RrF   r  Nr  r;   r;   r;   r<   R  s   r|  z0assigning %r as __class__ for %r silently failedc                   @   s   e Zd ZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.ONr  r;   r;   r;   r<   O  s   r}  c                       s   e Zd Z fddZdS )z3ClassPropertiesAndMethods.test_set_class.<locals>.Ac                    s
    | _ d S r   r  rx   r}  r;   r<   r    s    z;ClassPropertiesAndMethods.test_set_class.<locals>.A.__del__Nr   r   r   r  r;   r~  r;   r<   r    s   r  c                    s   g | ]
}  qS r;   r;   r  )r  r;   r<   r~    r   z<ClassPropertiesAndMethods.test_set_class.<locals>.<listcomp>r   )
r  r   r   r2   r)   rP  rD   r?   rB   r   )r6   r   r  r,  rc  r   Zcls2r7  rv  rw  or  r  r  rx  ry  rV  r  r   rz  r{  r|  r   r;   )r  r}  r6   r<   test_set_class  st    

*




z(ClassPropertiesAndMethods.test_set_classc              	      s  G dd dt }| }ddi|_|jd fdd|d  |g  |d |`G dd dt   fd	d
}G dd dt }G dd d t}G dd dt |d}G dd dt |d}|||fD ]B}|| |j}	zd|	d< W n ty   Y q0 d|  qG dd dtj }
G dd d tj}|
|fD ] }|d}|| d|jd< qFdd }G dd dt	 }G dd  d  t	}t	||fD ]:}| }d!di|_|j
d |||t  qd S )"Nc                   @   s   e Zd ZdS )z2ClassPropertiesAndMethods.test_set_dict.<locals>.CNr  r;   r;   r;   r<   r     r   r   rR   re   c              	      s8   z
|| _ W n ttfy    Y n0  d| |f  d S )Nz shouldn't allow %r.__dict__ = %r)rF   r  r   r   )r7  r   rx   r;   r<   rv    s
    
z5ClassPropertiesAndMethods.test_set_dict.<locals>.cantc                   @   s   e Zd ZdS )z5ClassPropertiesAndMethods.test_set_dict.<locals>.BaseNr  r;   r;   r;   r<   r    s   r  c              	      s|   | i  z| ` W n ttfy(   Y n0 d|    j d }z|| i  W n ttfyh   Y n0 d|   dS )zR
            x has to be an instance of a class inheriting from Base.
            zshouldn't allow del %r.__dict__rF   z&dict_descr allowed access to %r's dictN)rF   r  r   r   r  )r7  Z
dict_descrr  rv  r6   r;   r<   verify_dict_readonly  s    

zEClassPropertiesAndMethods.test_set_dict.<locals>.verify_dict_readonlyc                   @   s   e Zd ZdS )z6ClassPropertiesAndMethods.test_set_dict.<locals>.Meta1Nr  r;   r;   r;   r<   Meta1#  s   r  c                   @   s   e Zd ZdS )z6ClassPropertiesAndMethods.test_set_dict.<locals>.Meta2Nr  r;   r;   r;   r<   Meta2%  s   r  c                   @   s   e Zd ZdS )z2ClassPropertiesAndMethods.test_set_dict.<locals>.DNr  r;   r;   r;   r<   r  '  s   r  r   c                   @   s   e Zd ZdS )z2ClassPropertiesAndMethods.test_set_dict.<locals>.ENr  r;   r;   r;   r<   r,  )  s   r,  Zeggsr   z%r's __dict__ can be modifiedc                   @   s   e Zd ZdS )z8ClassPropertiesAndMethods.test_set_dict.<locals>.Module1Nr  r;   r;   r;   r<   Module16  s   r  c                   @   s   e Zd ZdS )z8ClassPropertiesAndMethods.test_set_dict.<locals>.Module2Nr  r;   r;   r;   r<   Module28  s   r  c              	   S   s*   z| ` W n ttfy    Y dS 0 dS d S )NFT)rF   r   r  )r  r;   r;   r<   can_delete_dictC  s
    z@ClassPropertiesAndMethods.test_set_dict.<locals>.can_delete_dictc                   @   s   e Zd ZdS )z;ClassPropertiesAndMethods.test_set_dict.<locals>.Exception1Nr  r;   r;   r;   r<   
Exception1J  s   r  c                   @   s   e Zd ZdS )z;ClassPropertiesAndMethods.test_set_dict.<locals>.Exception2Nr  r;   r;   r;   r<   
Exception2L  s   r  r?   )r  rF   rB   rR   rD   r   r   r  r  r  r?   r  )r6   r   r?   r  r  r  r  r,  r   Z
class_dictr  r  r  r   r  r  r  ZExceptionTyper  r;   r  r<   test_set_dict  sJ    




z'ClassPropertiesAndMethods.test_set_dictc                    s   G  fdddt  | t d d d | t dd d | td d d | t d d d | td d d | t dd d | tt d d dd G d	d
 d
t}d S )Nc                       s@   e Zd Zdd Z fddZeZd
 fdd	Zd fdd		ZdS )zBClassPropertiesAndMethods.test_binary_operator_override.<locals>.Ic                 S   s   dt |  S )NzI(%r)r)   rx   r;   r;   r<   r   W  s    zKClassPropertiesAndMethods.test_binary_operator_override.<locals>.I.__repr__c                    s    t | t | S r   r  r   r  r;   r<   rP   Y  s    zJClassPropertiesAndMethods.test_binary_operator_override.<locals>.I.__add__Nc                    s>   |d u r t t| t|S  t t| t|t|S d S r   r   r)   r6   r   r   r  r;   r<   __pow__\  s    zJClassPropertiesAndMethods.test_binary_operator_override.<locals>.I.__pow__c                    s@   |d u r  t t|t| |S  t t|t| t|S d S r   r  r  r  r;   r<   __rpow__a  s    zKClassPropertiesAndMethods.test_binary_operator_override.<locals>.I.__rpow__)N)N)r   r   r   r   rP   r   r  r  r;   r  r;   r<   r  V  s
   r  re   rf   zI(3)rh   zI(8)ru   c                   @   s   e Zd Zdd ZdS )zBClassPropertiesAndMethods.test_binary_operator_override.<locals>.Sc                 S   s   |   |  kS r   )rF  r   r;   r;   r<   r  o  s    zIClassPropertiesAndMethods.test_binary_operator_override.<locals>.S.__eq__Nr  r;   r;   r;   r<   Sn  s   r  )r)   rB   r   r   r  )r6   r  r;   r  r<   test_binary_operator_overrideT  s    $z7ClassPropertiesAndMethods.test_binary_operator_overridec           	      C   sz  G dd dt }G dd d|}G dd d|}G dd d||}| }t|}d	d
 |_| t|d dd
 |_| t|d dd
 |_| t|d dd
 |_| t|d d |_| tt| |`| t|d d |_| tt| |`| t|d d |_| tt| |`| t|d d |_| tt| |`| t|| d|_d|_| |jd | |jd dd }||_| |jd | |jd dd }||_	| |j
d | |jd | |jd |`| |jd |`| |jd | |jd |`	z
|j W n ty6   Y n0 | d G dd dt }G dd d|}~t  dd
 |_d S )Nc                   @   s   e Zd ZdS z>ClassPropertiesAndMethods.test_subclass_propagation.<locals>.ANr  r;   r;   r;   r<   r  t  s   r  c                   @   s   e Zd ZdS z>ClassPropertiesAndMethods.test_subclass_propagation.<locals>.BNr  r;   r;   r;   r<   r#  v  s   r#  c                   @   s   e Zd ZdS )z>ClassPropertiesAndMethods.test_subclass_propagation.<locals>.CNr  r;   r;   r;   r<   r   x  s   r   c                   @   s   e Zd ZdS )z>ClassPropertiesAndMethods.test_subclass_propagation.<locals>.DNr  r;   r;   r;   r<   r  z  s   r  c                 S   s   dS r  r;   rx   r;   r;   r<   r  ~  r   zEClassPropertiesAndMethods.test_subclass_propagation.<locals>.<lambda>r   c                 S   s   dS )N:  r;   rx   r;   r;   r<   r    r   r  c                 S   s   dS )N   r;   rx   r;   r;   r<   r    r   r  c                 S   s   dS r   r;   rx   r;   r;   r<   r    r   r   c                 S   s   |dkrdS t | |S )Nr   r   )r  rk  ri  r;   r;   r<   rk    s    zMClassPropertiesAndMethods.test_subclass_propagation.<locals>.__getattribute__r   c                 S   s   |dv rdS t |d S )N)r   r   r   r  r  ri  r;   r;   r<   r    s    zHClassPropertiesAndMethods.test_subclass_propagation.<locals>.__getattr__r  zd.foo should be undefined nowc                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   r    s   c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   r#    s   c                  W   s   d S r   r;   r  r;   r;   r<   r    r   )r  r  r  rB   rg  r   r   r   rk  r  r   r  r   r   r  ra   )	r6   r  r#  r   r  rJ   Z	orig_hashrk  r  r;   r;   r<   test_subclass_propagationr  sv    





z3ClassPropertiesAndMethods.test_subclass_propagationc                 C   s   dd l }G dd dt}d}||}| |||| G dd dt}|d}z|| | d W n ty~   Y n0 d S )	Nr   c                   @   s   e Zd ZdS )zBClassPropertiesAndMethods.test_buffer_inheritance.<locals>.MyBytesNr  r;   r;   r;   r<   r    s   r  rM  c                   @   s   e Zd ZdS )z@ClassPropertiesAndMethods.test_buffer_inheritance.<locals>.MyIntNr  r;   r;   r;   r<   r    s   r  r   z2subclass of int should not have a buffer interface)binasciir  rB   b2a_hexr)   r   r   )r6   r  r  rJ  rL   r  r;   r;   r<   test_buffer_inheritance  s    
z1ClassPropertiesAndMethods.test_buffer_inheritancec                    s   dd l  dd l}G  fdddt}|d}| t|| | tt|t | tt|t | t|d | t|d | t|d | | d | | d |	 }t
||d t
t||d | | d	 |  d S )
Nr   c                       s    e Zd Z fddZdd ZdS )zGClassPropertiesAndMethods.test_str_of_str_subclass.<locals>.octetstringc                    s     | ddS )Nascii)r  encodedecoderx   r  r;   r<   r     s    zOClassPropertiesAndMethods.test_str_of_str_subclass.<locals>.octetstring.__str__c                 S   s   | d S )Nz reprr;   rx   r;   r;   r<   r     s    zPClassPropertiesAndMethods.test_str_of_str_subclass.<locals>.octetstring.__repr__N)r   r   r   r   r   r;   r  r;   r<   octetstring  s   r  r  A   Z41zA repr)filez41
41
)r  ior  rB   rD   r   ordr   r   StringIOprintr  close)r6   r  r  r  capturer;   r  r<   test_str_of_str_subclass  s"    z2ClassPropertiesAndMethods.test_str_of_str_subclassc                 C   sD   dd }|  |jddd t }tj|dddd |  |d	 d S )
Nc                 S   s   | S r   r;   r  r;   r;   r<   r    r   z;ClassPropertiesAndMethods.test_keyword_arguments.<locals>.fr   r  u   abc½€latin1rB  )encodingrO  s   abc?)rB   r  	bytearrayr0   )r6   r  Zbar;   r;   r<   test_keyword_arguments  s    z0ClassPropertiesAndMethods.test_keyword_argumentsc                 C   sF   G dd dt }| |_z|   W n ty6   Y n0 | d d S )Nc                   @   s   e Zd ZdS )z8ClassPropertiesAndMethods.test_recursive_call.<locals>.ANr  r;   r;   r;   r<   r    s   r  z7Recursion limit should have been reached for __call__())r  r  RecursionErrorr   rI  r;   r;   r<   test_recursive_call  s    z-ClassPropertiesAndMethods.test_recursive_callc                    s   g  G  fdddt }| }|  g  ~t  |  dg G dd dt }| }z
|d= W n tyt   Y n0 | d d S )Nc                       s   e Zd Z fddZdS )z5ClassPropertiesAndMethods.test_delete_hook.<locals>.Cc                    s     d d S r   r]  rx   rm  r;   r<   r    s    z=ClassPropertiesAndMethods.test_delete_hook.<locals>.C.__del__Nr  r;   r  r;   r<   r     s   r   re   c                   @   s   e Zd ZdS )z5ClassPropertiesAndMethods.test_delete_hook.<locals>.DNr  r;   r;   r;   r<   r    r   r  r   z$invalid del() didn't raise TypeError)r  rB   r   r  r   r   )r6   r   rW   r  rJ   r;   r  r<   test_delete_hook  s    z*ClassPropertiesAndMethods.test_delete_hookc                 C   s   G dd dt }| }zt| W n ty4   Y n0 | d G dd dt}| }zt| W n tyt   Y n0 | d d S )Nc                   @   s   e Zd ZdS )z?ClassPropertiesAndMethods.test_hash_inheritance.<locals>.mydictNr  r;   r;   r;   r<   mydict  s   r  z#hash() of dict subclass should failc                   @   s   e Zd ZdS )z?ClassPropertiesAndMethods.test_hash_inheritance.<locals>.mylistNr  r;   r;   r;   r<   mylist'  s   r  z#hash() of list subclass should fail)r   r  r   r   r2   )r6   r  rJ   r  r;   r;   r<   test_hash_inheritance  s    
z/ClassPropertiesAndMethods.test_hash_inheritancec                 C   s  zdd  W n t y   Y n0 | d zdd W n tyJ   Y n0 | d zddg W n t yx   Y n0 | d zdd W n ty   Y n0 | d	 zd
d   W n t y   Y n0 | d zdi   W n ty   Y n0 | d zdd  W n t y$   Y n0 | d zdd  W n t yP   Y n0 | d zdd  W n t y|   Y n0 | d zdd   W n ty   Y n0 | d | d d | d d | dd d | dd d d S )Nr?   ru   z'' + 5 doesn't raise TypeErrorr   z%''.split('') doesn't raise ValueErrorr   z$''.join([0]) doesn't raise TypeError5z'''.rindex('5') doesn't raise ValueErrorz%(n)sz&'%(n)s' % None doesn't raise TypeErrorz%(nz&'%(n' % {} '' doesn't raise ValueErrorz%*sr  z''%*s' % ('abc') doesn't raise TypeErrorz%*.*s)r  ru   z,'%*.*s' % ('abc', 5) doesn't raise TypeErrorz%sre   rf   z%'%s' % (1, 2) doesn't raise TypeError%z#'%' % None doesn't raise ValueErrorZ534253re   Z534253xz%c)r   r   splitr  ru  rindexrB   isdigitrx   r;   r;   r<   test_str_operations1  sD    









z-ClassPropertiesAndMethods.test_str_operationsc                 C   s2   G dd d}| }| }||_ ||_t|}d S )Nc                   @   s   e Zd ZdS )z?ClassPropertiesAndMethods.test_deepcopy_recursive.<locals>.NodeNr  r;   r;   r;   r<   r  a  s   r  )rR   r?   r   )r6   r  r?   rR   r  r;   r;   r<   test_deepcopy_recursive_  s    z1ClassPropertiesAndMethods.test_deepcopy_recursivec                 C   sj   ddl m} ||}t| | |d | |d | |d | |j d|_| |jddi d S )Nr   )r  r   __file__r   re   )	r  r  r   r  r   r   rF   r   rB   )r6   r  rL   r;   r;   r<   test_uninitialized_modulesi  s    
z4ClassPropertiesAndMethods.test_uninitialized_modulesc                    sN  G  fdddt }G dd d| | |dg d |  dg d  d }| |jd  |d}| |  | |jd  d}| |  | |jd G dd dt }| |dd	|dd	f G d
d d| |  dd	 dd	f G dd dt }| |dd	||dd	f G dd d| |  dd	  dd	f d S )Nc                       s   e Zd Z fddZdS )3ClassPropertiesAndMethods.test_funny_new.<locals>.Cc                    s4   t |trg dS t |tr&t S t| S d S )Nrg   )r   r  r)   r  r   r  r  r;   r<   r   x  s    ;ClassPropertiesAndMethods.test_funny_new.<locals>.C.__new__Nr  r;   r  r;   r<   r   w  s   r   c                   @   s   e Zd Zdd ZdS )3ClassPropertiesAndMethods.test_funny_new.<locals>.Dc                 S   s
   || _ d S r   r>  r6   r  r;   r;   r<   r0   }  s    z<ClassPropertiesAndMethods.test_funny_new.<locals>.D.__init__Nr  r;   r;   r;   r<   r  |  s   r  r  rg   re   c                   @   s   e Zd Zedd ZdS )r  c                  W   s   | S r   r;   r|  r;   r;   r<   r     s    r  N)r   r   r   r  r   r;   r;   r;   r<   r     s   rf   c                   @   s   e Zd ZdS r  Nr  r;   r;   r;   r<   r    s   c                   @   s   e Zd Zedd ZdS )r  c                  W   s   | S r   r;   r|  r;   r;   r<   r     s    r  N)r   r   r   rL  r   r;   r;   r;   r<   r     s   c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   r    s   )r  rB   r   r   )r6   r   rJ   r;   r  r<   test_funny_newu  s(    z(ClassPropertiesAndMethods.test_funny_newc                 C   s   G dd dt }| }|}|d9 }| ||df |}|d9 }| ||df |}|d9 }| ||df |}|d9 }| ||df |}|d 9 }| ||d f |}|d9 }| ||df d S )Nc                   @   s   e Zd Zdd ZdS )z2ClassPropertiesAndMethods.test_imul_bug.<locals>.Cc                 S   s   | |fS r   r;   r   r;   r;   r<   ro     s    z;ClassPropertiesAndMethods.test_imul_bug.<locals>.C.__imul__N)r   r   r   ro   r;   r;   r;   r<   r     s   r   r  rf   rh   l                r   r  rB   )r6   r   r7  rc  r;   r;   r<   test_imul_bug  s(    z'ClassPropertiesAndMethods.test_imul_bugc                    s   dd l }G  fdddt}|d}|d  |jd  | d | |} |jd  | d ||} |jd  | d d S )Nr   c                       s<   e Zd ZdddZdddZdd Zdd	 Z fd
dZdS )z7ClassPropertiesAndMethods.test_copy_setstate.<locals>.CNc                 S   s   || _ || _d S r   )r   _C__foorD  r;   r;   r<   r0     s    z@ClassPropertiesAndMethods.test_copy_setstate.<locals>.C.__init__c                 S   s
   || _ d S r   r>  rD  r;   r;   r<   setfoo  s    z>ClassPropertiesAndMethods.test_copy_setstate.<locals>.C.setfooc                 S   s   | j S r   )r  rx   r;   r;   r<   getfoo  s    z>ClassPropertiesAndMethods.test_copy_setstate.<locals>.C.getfooc                 S   s   | j gS r   r>  rx   r;   r;   r<   __getstate__  s    zDClassPropertiesAndMethods.test_copy_setstate.<locals>.C.__getstate__c                    s$     t|d |d  | _| _d S r   )rB   r   r  r   )r  lstrx   r;   r<   __setstate__  s    zDClassPropertiesAndMethods.test_copy_setstate.<locals>.C.__setstate__)N)N)r   r   r   r0   r  r  r  r  r;   rx   r;   r<   r     s
   

r   r   r   )r   r  r  rB   r   r  r   )r6   r   r   r?   rR   r;   rx   r<   test_copy_setstate  s    


z,ClassPropertiesAndMethods.test_copy_setstatec                 C   s  |  dd d d |  dtd d |  tdtdd G dd dt}|  |dd d d |  |dtd d |  |dtdd |  dd d d |  dtd d |  tdtdd G d	d
 d
t}|  |dd d d |  |dtd d |  |dtdd |  g dd d ddg |  g dtd ddg |  tg dtdddg G dd dt}|  |g dd d ddg |  |g dtd ddg |  |g dtdddg |g d}ddg|tdd< |  |g d ddg|tddd< |  |g d |tddddg |  |g d |tdddddg |  |g d d S )Nr  rk   Zhellc                   @   s   e Zd Zdd ZdS )z0ClassPropertiesAndMethods.test_slices.<locals>.Sc                 S   s   t | |S r   )r  rU   r6  r;   r;   r<   rU     s    z<ClassPropertiesAndMethods.test_slices.<locals>.S.__getitem__Nr   r;   r;   r;   r<   r    s   r  rg   rf   r  c                   @   s   e Zd Zdd ZdS )z0ClassPropertiesAndMethods.test_slices.<locals>.Tc                 S   s   t | |S r   )r  rU   r6  r;   r;   r<   rU     s    z<ClassPropertiesAndMethods.test_slices.<locals>.T.__getitem__Nr   r;   r;   r;   r<   r?    s   r?  re   c                   @   s   e Zd Zdd ZdS )z0ClassPropertiesAndMethods.test_slices.<locals>.Lc                 S   s   t | |S r   )r2   rU   r6  r;   r;   r<   rU     s    z<ClassPropertiesAndMethods.test_slices.<locals>.L.__getitem__Nr   r;   r;   r;   r<   rV    s   rV  rh   )re   rh   rf   r   )rh   re   rf   )rh   rf   re   )rf   rh   re   )rB   rX   r  rU   r  r2   ra   )r6   r  r?  rV  r?   r;   r;   r<   test_slices  s<       "z%ClassPropertiesAndMethods.test_slicesc                    sD   G  fdddt    }d|_~t  | t jd  `d S )Nc                       s   e Zd Zg Z fddZdS )z>ClassPropertiesAndMethods.test_subtype_resurrection.<locals>.Cc                    s    j |  d S r   )	containerr|   rx   r  r;   r<   r    s    zFClassPropertiesAndMethods.test_subtype_resurrection.<locals>.C.__del__N)r   r   r   r  r  r;   r  r;   r<   r      s   r   r   re   )r  r  r   r  rB   r   r  r  )r6   rW   r;   r  r<   test_subtype_resurrection  s    z3ClassPropertiesAndMethods.test_subtype_resurrectionc                 C   s0   G dd dt }d }tdD ]}||}q~d S )Nc                   @   s   e Zd ZdgZdd ZdS )z9ClassPropertiesAndMethods.test_slots_trash.<locals>.trashr7  c                 S   s
   || _ d S r   rf  r6  r;   r;   r<   r0     s    zBClassPropertiesAndMethods.test_slots_trash.<locals>.trash.__init__N)r   r   r   r   r0   r;   r;   r;   r<   trash  s   r  iP  )r  r   )r6   r  r  r   r;   r;   r<   test_slots_trash  s
    
z*ClassPropertiesAndMethods.test_slots_trashc                 C   sn   G dd dt }G dd dt }G dd d||}t rJ| |j|j | |d | |d d	| _d S )
Nc                   @   s   e Zd ZdZdS )zDClassPropertiesAndMethods.test_slots_multiple_inheritance.<locals>.Ar;   Nr  r;   r;   r;   r<   r  $  s   r  c                   @   s   e Zd ZdS )zDClassPropertiesAndMethods.test_slots_multiple_inheritance.<locals>.BNr  r;   r;   r;   r<   r#  &  s   r#  c                   @   s   e Zd ZdZdS )zDClassPropertiesAndMethods.test_slots_multiple_inheritance.<locals>.Cr;   Nr  r;   r;   r;   r<   r   (  s   r   rF   r  rf   )r  r   r  rB   __basicsize__r   r7  )r6   r  r#  r   r;   r;   r<   test_slots_multiple_inheritance"  s    z9ClassPropertiesAndMethods.test_slots_multiple_inheritancec                 C   sZ   G dd dt }| }| |d d | |d d | d| d | d| d d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z.ClassPropertiesAndMethods.test_rmul.<locals>.Cc                 S   s   dS )Nr   r;   r   r;   r;   r<   rq   4  s    z6ClassPropertiesAndMethods.test_rmul.<locals>.C.__mul__c                 S   s   dS )Nrmulr;   r   r;   r;   r<   rs   6  s    z7ClassPropertiesAndMethods.test_rmul.<locals>.C.__rmul__N)r   r   r   rq   rs   r;   r;   r;   r<   r   3  s   r   rf   r   g@r  r  r   r;   r;   r<   	test_rmul0  s    z#ClassPropertiesAndMethods.test_rmulc                 C   s"   G dd dt }| }|dC }d S )Nc                   @   s   e Zd Zdd ZdS )z.ClassPropertiesAndMethods.test_ipow.<locals>.Cc                 S   s   d S r   r;   r   r;   r;   r<   __ipow__B  s    z7ClassPropertiesAndMethods.test_ipow.<locals>.C.__ipow__N)r   r   r   r  r;   r;   r;   r<   r   A  s   r   rf   r  r   r;   r;   r<   	test_ipow>  s    z#ClassPropertiesAndMethods.test_ipowc              
      s  G dd dt }G  fdddt  G dd d|}G dd d|}| }| }|f|_ f|_| | d	 | | d	 | |jd
 | |jd
 |   |g z|`W n ttfy   Y n0 | d z
d|_W n> ty  } z$t	|dkr| d W Y d }~nd }~0 0 | d z|f|_W n tyL   Y n0 | d z||f|_W n tyz   Y n0 | d z|f|_W n ty   Y n0 | d d S )Nc                   @   s   e Zd ZdS )z7ClassPropertiesAndMethods.test_mutable_bases.<locals>.CNr  r;   r;   r;   r<   r   K  s   r   c                       s&   e Zd Z fddZdd Z  ZS )z8ClassPropertiesAndMethods.test_mutable_bases.<locals>.C2c                    s    |dkrdS t  | |S d S )Nr?   rf   )r  rk  r6   r  )rR  r   r;   r<   rk  N  s    zIClassPropertiesAndMethods.test_mutable_bases.<locals>.C2.__getattribute__c                 S   s   dS r   r;   rx   r;   r;   r<   rI   S  s    z=ClassPropertiesAndMethods.test_mutable_bases.<locals>.C2.meth)r   r   r   rk  rI   r  r;   rR  r  r<   rR  M  s   rR  c                   @   s   e Zd ZdS )z7ClassPropertiesAndMethods.test_mutable_bases.<locals>.DNr  r;   r;   r;   r<   r  U  s   r  c                   @   s   e Zd ZdS )z7ClassPropertiesAndMethods.test_mutable_bases.<locals>.ENr  r;   r;   r;   r<   r,  W  s   r,  re   rf   z&shouldn't be able to delete .__bases__r;   z/a new-style class can't have only classic basesz'wrong error message for .__bases__ = ()z)shouldn't be able to set .__bases__ to ()z.shouldn't be able to create inheritance cyclesz#didn't detect repeated base classes)
r  rG   rB   rI   r?   r  r   r  r   r  )r6   r   r  r,  rJ   r  r  r;   r  r<   test_mutable_basesG  sN    

 


z,ClassPropertiesAndMethods.test_mutable_basesc                 C   s   dd t j D }|D ],}t|d |tur| t|jd| qG dd dt}G dd dt}G d	d
 d
|}zt	f|_W n t
y   Y n0 | d zt	ft_W n t
y   Y n0 | d z|tf|_W n t
y   Y n0 | d d S )Nc                 S   s   g | ]}t |tr|qS r;   )r   rD   )r}  tpr;   r;   r<   r~    s   
z@ClassPropertiesAndMethods.test_builtin_bases.<locals>.<listcomp>rG   re   c                   @   s   e Zd ZdS )z7ClassPropertiesAndMethods.test_builtin_bases.<locals>.LNr  r;   r;   r;   r<   rV    s   rV  c                   @   s   e Zd ZdS )z7ClassPropertiesAndMethods.test_builtin_bases.<locals>.CNr  r;   r;   r;   r<   r     s   r   c                   @   s   e Zd ZdS )z7ClassPropertiesAndMethods.test_builtin_bases.<locals>.DNr  r;   r;   r;   r<   r    s   r  z/shouldn't turn list subclass into dict subclassz-shouldn't be able to assign to list.__bases__z#best_base calculation found wanting)builtinsrF   valuesr  rk  rB   r   rG   r2   r   r   r   )r6   Zbuiltin_typesr  rV  r   r  r;   r;   r<   test_builtin_bases  s.    

z,ClassPropertiesAndMethods.test_builtin_basesc                 C   s  |  t$ G dd dtd }W d    n1 s40    Y  |  t& G dd dttd }W d    n1 st0    Y  |  t& G dd dtd t}W d    n1 s0    Y  G dd dt}|  t& G dd d|td }W d    n1 s0    Y  |  t& G dd dtd |}W d    n1 sH0    Y  G d	d dt}|  t td f|_W d    n1 s0    Y  |  t ttd f|_W d    n1 s0    Y  |  t td tf|_W d    n1 s0    Y  |  t |td f|_W d    n1 s>0    Y  |  t td |f|_W d    n1 sx0    Y  d S )
Nc                   @   s   e Zd ZdS z>ClassPropertiesAndMethods.test_unsubclassable_types.<locals>.XNr  r;   r;   r;   r<   rW    s   rW  c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   rW    s   c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   rW    s   c                   @   s   e Zd ZdS )z>ClassPropertiesAndMethods.test_unsubclassable_types.<locals>.ONr  r;   r;   r;   r<   r}    s   r}  c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   rW    s   c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   rW    s   c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   rW    s   )rg  r   rD   r  rG   )r6   rW  r}  r;   r;   r<   test_unsubclassable_types  s,    24466,...z3ClassPropertiesAndMethods.test_unsubclassable_typesc           
         s   G  fdddt  G dd dt }G dd dt}G dd dt}G d	d
 d
|}G dd d|}G dd d| d}G dd d||d}|j}|j}	z|f|_W n. ty   | |j| | |j|	 Y n0 | d d S )Nc                       s&   e Zd Z fddZdd Z  ZS )zOClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.WorkOncec                    s   d| _ t |  |||S r   )flagr  r   )r6   r9   r  rF  )WorkOncer   r;   r<   r     s    zWClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.WorkOnce.__new__c                 S   s0   | j dkrtdn|  j d7  _ t| S d S )Nr   Zbozore   )r  r  rD   rT  rx   r;   r;   r<   rT    s    

zSClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.WorkOnce.mro)r   r   r   r   rT  r  r;   r  r  r<   r    s   r  c                   @   s   e Zd Zdd ZdS )zQClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.WorkAlwaysc                 S   s
   t | S r   )rD   rT  rx   r;   r;   r<   rT    s    zUClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.WorkAlways.mroNrW  r;   r;   r;   r<   
WorkAlways  s   r  c                   @   s   e Zd ZdS )zHClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.CNr  r;   r;   r;   r<   r     s   r   c                   @   s   e Zd ZdS )zIClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.C2Nr  r;   r;   r;   r<   rR    s   rR  c                   @   s   e Zd ZdS )zHClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.DNr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )zHClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.ENr  r;   r;   r;   r<   r,    s   r,  c                   @   s   e Zd ZdS )zHClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.FNr  r;   r;   r;   r<   rc    s   rc  r   c                   @   s   e Zd ZdS )zHClassPropertiesAndMethods.test_mutable_bases_with_failing_mro.<locals>.GNr  r;   r;   r;   r<   r    s   r  zexception not propagated)rD   r  r  rG   r  rB   r   )
r6   r  r   rR  r  r,  rc  r  ZE_mro_beforeZD_mro_beforer;   r  r<   #test_mutable_bases_with_failing_mro  s     z=ClassPropertiesAndMethods.test_mutable_bases_with_failing_mroc                 C   s   G dd dt }G dd dt }G dd d||}G dd d||}G d	d
 d
||}z||f|_W n tyv   Y n0 | d d S )Nc                   @   s   e Zd ZdS )zJClassPropertiesAndMethods.test_mutable_bases_catch_mro_conflict.<locals>.ANr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )zJClassPropertiesAndMethods.test_mutable_bases_catch_mro_conflict.<locals>.BNr  r;   r;   r;   r<   r#    s   r#  c                   @   s   e Zd ZdS )zJClassPropertiesAndMethods.test_mutable_bases_catch_mro_conflict.<locals>.CNr  r;   r;   r;   r<   r     s   r   c                   @   s   e Zd ZdS )zJClassPropertiesAndMethods.test_mutable_bases_catch_mro_conflict.<locals>.DNr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )zJClassPropertiesAndMethods.test_mutable_bases_catch_mro_conflict.<locals>.ENr  r;   r;   r;   r<   r,    s   r,  zdidn't catch MRO conflict)r  rG   r   r   )r6   r  r#  r   r  r,  r;   r;   r<   %test_mutable_bases_catch_mro_conflict  s    z?ClassPropertiesAndMethods.test_mutable_bases_catch_mro_conflictc                 C   sV   G dd dt }|j}d|_| |j|jf|df d|_| |j|jf|df d S )Nc                   @   s   e Zd ZdS )z7ClassPropertiesAndMethods.test_mutable_names.<locals>.CNr  r;   r;   r;   r<   r      s   r   r  zD.E)r  r   r   rB   )r6   r   r   r;   r;   r<   test_mutable_names  s    z,ClassPropertiesAndMethods.test_mutable_namesc                    s6   G  fdddt }G dd d |d _d _d S )Nc                       s   e Zd Z fddZdS )z<ClassPropertiesAndMethods.test_evil_type_name.<locals>.Nastyc                    s
   d _ d S )Nr   )r   rx   r  r;   r<   r  1  s    zDClassPropertiesAndMethods.test_evil_type_name.<locals>.Nasty.__del__Nr  r;   r  r;   r<   Nasty0  s   r  c                   @   s   e Zd ZdS )z8ClassPropertiesAndMethods.test_evil_type_name.<locals>.CNr  r;   r;   r;   r<   r   4  s   r   r  Znormal)r  r   )r6   r  r;   r  r<   test_evil_type_name,  s    
z-ClassPropertiesAndMethods.test_evil_type_namec                 C   s  G dd dt }| |dd d | d|d d G dd dt}| | d d | d|  d	 G d
d d|}| | |  d | | |  d G dd d|}| |j|j | | d d | d|  d	 | | |  d | | |  d d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z;ClassPropertiesAndMethods.test_subclass_right_op.<locals>.Bc                 S   s   dS )NB.__floordiv__r;   r   r;   r;   r<   __floordiv__C  s    zHClassPropertiesAndMethods.test_subclass_right_op.<locals>.B.__floordiv__c                 S   s   dS )NB.__rfloordiv__r;   r   r;   r;   r<   __rfloordiv__E  s    zIClassPropertiesAndMethods.test_subclass_right_op.<locals>.B.__rfloordiv__Nr   r   r   r  r  r;   r;   r;   r<   r#  B  s   r#  re   r  r  c                   @   s   e Zd Zdd Zdd ZdS )z;ClassPropertiesAndMethods.test_subclass_right_op.<locals>.Cc                 S   s   dS )NC.__floordiv__r;   r   r;   r;   r<   r  N  s    zHClassPropertiesAndMethods.test_subclass_right_op.<locals>.C.__floordiv__c                 S   s   dS )NC.__rfloordiv__r;   r   r;   r;   r<   r  P  s    zIClassPropertiesAndMethods.test_subclass_right_op.<locals>.C.__rfloordiv__Nr  r;   r;   r;   r<   r   M  s   r   r  r  c                   @   s   e Zd Zdd Zdd ZdS )z;ClassPropertiesAndMethods.test_subclass_right_op.<locals>.Dc                 S   s   dS )ND.__floordiv__r;   r   r;   r;   r<   r  Y  s    zHClassPropertiesAndMethods.test_subclass_right_op.<locals>.D.__floordiv__c                 S   s   dS )ND.__rfloordiv__r;   r   r;   r;   r<   r  [  s    zIClassPropertiesAndMethods.test_subclass_right_op.<locals>.D.__rfloordiv__Nr  r;   r;   r;   r<   r  X  s   r  r  r  c                   @   s   e Zd ZdS )z;ClassPropertiesAndMethods.test_subclass_right_op.<locals>.ENr  r;   r;   r;   r<   r,  c  s   r,  )r)   rB   r  r  )r6   r#  r   r  r,  r;   r;   r<   test_subclass_right_op:  s    z0ClassPropertiesAndMethods.test_subclass_right_opz)testing an internal kind of method objectc                 C   s,  g d}d d d d}|  t|| |  i || tjd }|  |d t|| |  |i || z|d d  W n ty   Y n0 | d z|d W n ty   Y n0 | d z|d d W n ty   Y n0 | d z|d t W n ty   Y n0 | d d S )Nrg   fromkeysz0shouldn't have allowed descr.__get__(None, None)r   z(shouldn't have allowed descr.__get__(42)z.shouldn't have allowed descr.__get__(None, 42)z/shouldn't have allowed descr.__get__(None, int))rB   r   r  rF   r  r   r   r)   )r6   r  rH   rl  r;   r;   r<   test_meth_class_getm  s6    



z-ClassPropertiesAndMethods.test_meth_class_getc                 C   s   G dd dt }G dd d}| }||}| || | || G dd d|}| }||}| || | || G dd dt }| }||}| || | || G dd d|}| }||}| || | || d S )	Nc                   @   s   e Zd Zdd Zdd ZdS )z<ClassPropertiesAndMethods.test_isinst_isclass.<locals>.Proxyc                 S   s
   || _ d S r   _Proxy__objr7  r;   r;   r<   r0     s    zEClassPropertiesAndMethods.test_isinst_isclass.<locals>.Proxy.__init__c                 S   s&   | drt| |S t| j|S d S NZ_Proxy__r  r  rk  rE   r  ri  r;   r;   r<   rk    s    
zMClassPropertiesAndMethods.test_isinst_isclass.<locals>.Proxy.__getattribute__Nr   r   r   r0   rk  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS z8ClassPropertiesAndMethods.test_isinst_isclass.<locals>.CNr  r;   r;   r;   r<   r     s   r   c                   @   s   e Zd ZdS z8ClassPropertiesAndMethods.test_isinst_isclass.<locals>.DNr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   r     s   c                   @   s   e Zd ZdS r  r  r;   r;   r;   r<   r    s   )r  r   )r6   r  r   r?   par  r;   r;   r<   test_isinst_isclass  s*    	z-ClassPropertiesAndMethods.test_isinst_isclassc                    s\   G dd dt }G dd dt }G  fddd|   }||}|  jd |d d S )	Nc                   @   s   e Zd Zdd Zdd ZdS )z9ClassPropertiesAndMethods.test_proxy_super.<locals>.Proxyc                 S   s
   || _ d S r   r  r7  r;   r;   r<   r0     s    zBClassPropertiesAndMethods.test_proxy_super.<locals>.Proxy.__init__c                 S   s&   | drt| |S t| j|S d S r  r  ri  r;   r;   r<   rk    s    
zJClassPropertiesAndMethods.test_proxy_super.<locals>.Proxy.__getattribute__Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd Zdd ZdS )z5ClassPropertiesAndMethods.test_proxy_super.<locals>.Bc                 S   s   dS )NzB.fr;   rx   r;   r;   r<   r    s    z7ClassPropertiesAndMethods.test_proxy_super.<locals>.B.fNrS  r;   r;   r;   r<   r#    s   r#  c                       s   e Zd Z fddZ  ZS )z5ClassPropertiesAndMethods.test_proxy_super.<locals>.Cc                    s   t  |  d S )Nz->C.f)r  r  rx   )r   r   r;   r<   r    s    z7ClassPropertiesAndMethods.test_proxy_super.<locals>.C.f)r   r   r   r  r  r;   r  r  r<   r     s   r   r  zB.f->C.f)r  rB   rF   )r6   r  r#  r   r  r;   r  r<   test_proxy_super  s    	z*ClassPropertiesAndMethods.test_proxy_superc                 C   sb   zt tdd W n ty$   Y n0 | d zt td W n tyR   Y n0 | d d S )Nr   r   z"Carlo Verre __setattr__ succeeded!rF  z"Carlo Verre __delattr__ succeeded!)r  rn  r  r   r   rq  rx   r;   r;   r<   test_carloverre  s    
z)ClassPropertiesAndMethods.test_carloverrec                 C   sj   G dd dt }G dd d}G dd d||}|dtfi }z
d|_W n tyd   | d	 Y n0 d S )
Nc                   @   s   e Zd Zdd ZdS )zHClassPropertiesAndMethods.test_carloverre_multi_inherit_valid.<locals>.Ac                 S   s   t | || d S r   )rD   rn  r   r   r   r;   r;   r<   rn    s    zTClassPropertiesAndMethods.test_carloverre_multi_inherit_valid.<locals>.A.__setattr__Nr   r   r   rn  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )zHClassPropertiesAndMethods.test_carloverre_multi_inherit_valid.<locals>.BNr  r;   r;   r;   r<   r#    s   r#  c                   @   s   e Zd ZdS )zHClassPropertiesAndMethods.test_carloverre_multi_inherit_valid.<locals>.CNr  r;   r;   r;   r<   r     s   r   r  Tz1setattr through direct base types should be legalrD   r  r  r   r   r6   r  r#  r   r   r;   r;   r<   #test_carloverre_multi_inherit_valid  s    
z=ClassPropertiesAndMethods.test_carloverre_multi_inherit_validc                 C   sj   G dd dt }G dd d}G dd d||}|dtfi }z
d|_W n tyZ   Y n0 | d	 d S )
Nc                   @   s   e Zd Zdd ZdS )zJClassPropertiesAndMethods.test_carloverre_multi_inherit_invalid.<locals>.Ac                 S   s   t | || d S r   )r  rn  r  r;   r;   r<   rn    s    zVClassPropertiesAndMethods.test_carloverre_multi_inherit_invalid.<locals>.A.__setattr__Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )zJClassPropertiesAndMethods.test_carloverre_multi_inherit_invalid.<locals>.BNr  r;   r;   r;   r<   r#    s   r#  c                   @   s   e Zd ZdS )zJClassPropertiesAndMethods.test_carloverre_multi_inherit_invalid.<locals>.CNr  r;   r;   r;   r<   r     s   r   r  Tz6setattr through indirect base types should be rejectedr  r  r;   r;   r<   %test_carloverre_multi_inherit_invalid  s    
z?ClassPropertiesAndMethods.test_carloverre_multi_inherit_invalidc                    s@   dd l  G  fddd}G dd dt}| }|||_~d S )Nr   c                       s    e Zd Z fddZdd ZdS )zAClassPropertiesAndMethods.test_weakref_segfault.<locals>.Provokerc                    s     || _ d S r   r  )r6   Z	referrentr  r;   r<   r0     s    zJClassPropertiesAndMethods.test_weakref_segfault.<locals>.Provoker.__init__c                 S   s   |   }d S r   r	  r6  r;   r;   r<   r    s    zIClassPropertiesAndMethods.test_weakref_segfault.<locals>.Provoker.__del__N)r   r   r   r0   r  r;   r
  r;   r<   Provoker  s   r  c                   @   s   e Zd ZdS )z=ClassPropertiesAndMethods.test_weakref_segfault.<locals>.OopsNr  r;   r;   r;   r<   Oops  s   r  )r  r  Zwhatever)r6   r  r  r  r;   r
  r<   test_weakref_segfault
  s    
z/ClassPropertiesAndMethods.test_weakref_segfaultc                 C   s$   dd }t dD ]
}|j}qd }d S )Nc                   S   s   d S r   r;   r;   r;   r;   r<   r    r   zAClassPropertiesAndMethods.test_wrapper_segfault.<locals>.<lambda>i@B )r   r  )r6   r  r   r;   r;   r<   test_wrapper_segfault  s    z/ClassPropertiesAndMethods.test_wrapper_segfaultc                 C   s^   t j}G dd d}| t _z4ztd W n ty<   Y n0 | d W |t _n|t _0 d S )Nc                   @   s   e Zd Zdd ZdS )z>ClassPropertiesAndMethods.test_file_fault.<locals>.StdoutGuardc                 S   s   t jt _td| d S )Nz!Premature access to sys.stdout.%s)r   
__stdout__stdoutr  r  r;   r;   r<   r  (  s    zJClassPropertiesAndMethods.test_file_fault.<locals>.StdoutGuard.__getattr__Nr   r   r   r  r;   r;   r;   r<   StdoutGuard'  s   r  zOops!zDidn't raise RuntimeError)r   r  r  r  r   )r6   Ztest_stdoutr  r;   r;   r<   test_file_fault$  s    z)ClassPropertiesAndMethods.test_file_faultc                    sp   G  fdddt }G dd dt G fdddt    }d|j| < | |jd t  | |d	 d S )
Nc                       s    e Zd Zdd Z fddZdS )zHClassPropertiesAndMethods.test_vicious_descriptor_nonsense.<locals>.Evilc                 S   s   t dS )Nr  r  rx   r;   r;   r<   r  =  s    zQClassPropertiesAndMethods.test_vicious_descriptor_nonsense.<locals>.Evil.__hash__c                    s    z ` W n ty   Y n0 dS r   )r  r  r   r  r;   r<   r  ?  s
    zOClassPropertiesAndMethods.test_vicious_descriptor_nonsense.<locals>.Evil.__eq__Nr   r   r   r  r  r;   r  r;   r<   Evil<  s   r  c                   @   s   e Zd ZdddZdS )zIClassPropertiesAndMethods.test_vicious_descriptor_nonsense.<locals>.DescrNc                 S   s   dS r   r;   )r6   obrD   r;   r;   r<   r  H  s    zQClassPropertiesAndMethods.test_vicious_descriptor_nonsense.<locals>.Descr.__get__)Nr  r;   r;   r;   r<   DescrG  s   r  c                       s   e Zd Z  ZdS )zEClassPropertiesAndMethods.test_vicious_descriptor_nonsense.<locals>.CN)r   r   r   r  r;   r  r;   r<   r   K  s   r   r   re   r  )r  rF   rB   r  r   r  r   )r6   r  rW   r;   )r   r  r<    test_vicious_descriptor_nonsense5  s    z:ClassPropertiesAndMethods.test_vicious_descriptor_nonsensec                 C   s<   G dd dt }z
|  W n ty,   Y n0 | d d S )Nc                   @   s   e Zd Zdd ZdS )z0ClassPropertiesAndMethods.test_init.<locals>.Fooc                 S   s   dS )Nr   r;   rx   r;   r;   r<   r0   Y  s    z9ClassPropertiesAndMethods.test_init.<locals>.Foo.__init__Nr  r;   r;   r;   r<   FooX  s   r  z'did not test __init__() for None return)r  r   r   )r6   r  r;   r;   r<   	test_initV  s    
z#ClassPropertiesAndMethods.test_initc                 C   s   |  t ||k  W d    n1 s(0    Y  |  t ||k W d    n1 sZ0    Y  |  t ||k W d    n1 s0    Y  |  t ||k W d    n1 s0    Y  d S r   rg  r   r6   r?   rR   r;   r;   r<   assertNotOrderableb  s    &&&z,ClassPropertiesAndMethods.assertNotOrderablec                 C   s   g }|  |j|jk | |j|jk | |jg jk |  |jg jk | |j|jk |  |j|jk | |j|j | |jjd | |jj| | |jj	t
 | |jjt
jj t|j d S )NrP   )r   rP   r   rq   r  rB   r   r   r  __objclass__r2   r  r  r6   r   r;   r;   r<   test_method_wrapperl  s    z-ClassPropertiesAndMethods.test_method_wrapperc                 C   s   g }|  |j|jk | |j|jk | |jg jk |  |jg jk | |j|jk |  |j|jk | |j|j | |jjd | |jj| | |jj	t
jj	 t|j d S )Nr|   )r   r|   r   popr  rB   r   r   r  r  r2   r  r!  r;   r;   r<   test_builtin_function_or_method~  s    z9ClassPropertiesAndMethods.test_builtin_function_or_methodc                 C   s   |  tjtjk | tjtjk | tjtjk |  tjtjk | tjtj | tjjd | tjj	t |  tj
tj
k | tj
tj
k | tj
tjk |  tj
tjk | tj
tj
 | tj
jd | tj
j	t d S )NrP   r|   )r   r2   rP   r   rq   r  rB   r   r   r   r|   r#  rx   r;   r;   r<   !test_special_unbound_method_types  s    z;ClassPropertiesAndMethods.test_special_unbound_method_typesc                    s   dd l  dd } fdd}tjd }tj}dD ]\}}}d|d	d   }td
d||i}	|	 }
|||
|
 |||
| |||
| |r2|||
|
 |||
| |||
| d|d	d   }tdd||i}| }||||
 |||| |||| q2d S )Nr   c                 S   s   t S r   r   r   r;   r;   r<   specialmethod  s    zEClassPropertiesAndMethods.test_not_implemented.<locals>.specialmethodc                    s>   zt | || d W n ty(   Y n0 d| f  d S )N)r7  rc  operatorzno TypeError from %r)r]   r   r   )r:   r7  rc  r'  r6   r;   r<   rm    s
    z=ClassPropertiesAndMethods.test_not_implemented.<locals>.checkre   ))rP   zx + yzx += y)__sub__zx - yzx -= y)rq   zx * yzx *= y)
__matmul__zx @ yzx @= y)__truediv__zx / yzx /= y)r  zx // yzx //= y)__mod__zx % yzx %= y)
__divmod__zdivmod(x, y)N)r  zx ** yzx **= y)
__lshift__zx << yzx <<= y)
__rshift__zx >> yzx >>= y)__and__zx & yzx &= y)__or__zx | yzx |= y)__xor__zx ^ yzx ^= yZ__rrf   r  r;   Z__ir   )r'  r   r   rD   )r6   r&  rm  ZN1ZN2r9   r:   ZiexprZrnamer  r?   Zinamer   rW   r;   r(  r<   test_not_implemented  s,    
z.ClassPropertiesAndMethods.test_not_implementedc                 C   s4   G dd dt }| }d|dd< | |jd d S )Nc                   @   s   e Zd Zdd ZdS )z6ClassPropertiesAndMethods.test_assign_slice.<locals>.Cc                 S   s
   || _ d S r   r   )r6   idxr   r;   r;   r<   ra     s    zBClassPropertiesAndMethods.test_assign_slice.<locals>.C.__setitem__N)r   r   r   ra   r;   r;   r;   r<   r     s   r   rh   re   rf   )r  rB   r   )r6   r   rW   r;   r;   r<   test_assign_slice  s    z+ClassPropertiesAndMethods.test_assign_slicec                    s   G dd dt }|d G  fdddt }| }| |j  d|_| |jd G dd dt}G d	d d|d
}d|_|d|_| |jd d S )Nc                   @   s   e Zd Zdd Zdd ZdS )z<ClassPropertiesAndMethods.test_set_and_no_get.<locals>.Descrc                 S   s
   || _ d S r   r9   ri  r;   r;   r<   r0     s    zEClassPropertiesAndMethods.test_set_and_no_get.<locals>.Descr.__init__c                 S   s   ||j | j< d S r   )rF   r9   r6  r;   r;   r<   r    s    zDClassPropertiesAndMethods.test_set_and_no_get.<locals>.Descr.__set__N)r   r   r   r0   r  r;   r;   r;   r<   r    s   r  r?   c                       s   e Zd Z ZdS z8ClassPropertiesAndMethods.test_set_and_no_get.<locals>.XNr  r;   rl  r;   r<   rW    s   rW  r   c                   @   s   e Zd ZdS )z;ClassPropertiesAndMethods.test_set_and_no_get.<locals>.MetaNr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS r8  r  r;   r;   r;   r<   rW    s   r   )r  r   r?   rB   rD   )r6   r  rW  r7  r  r;   r9  r<   test_set_and_no_get  s    
z-ClassPropertiesAndMethods.test_set_and_no_getc                    s   G dd dt }| G fdddt }G fdddt }G fdddt }| tt| d	 | jd
 | tt| d	 | jd | tt| d	 | jd G  fdddt  | tt  d	 d S )Nc                   @   s   e Zd ZdZdddZdS )z@ClassPropertiesAndMethods.test_getattr_hooks.<locals>.Descriptorr   Nc                    s    fdd}|S )Nc                    s     j d7  _ t| d S r   )r<  r  r7  rx   r;   r<   r    s    zXClassPropertiesAndMethods.test_getattr_hooks.<locals>.Descriptor.__get__.<locals>.getterr;   )r6   r   Zobjtyper  r;   rx   r<   r    s    zHClassPropertiesAndMethods.test_getattr_hooks.<locals>.Descriptor.__get__)N)r   r   r   r<  r  r;   r;   r;   r<   
Descriptor  s   r;  c                       s   e Zd Z ZdS )z7ClassPropertiesAndMethods.test_getattr_hooks.<locals>.AN)r   r   r   rk  r;   r9  r;   r<   r    s   r  c                       s   e Zd Z ZdS )z7ClassPropertiesAndMethods.test_getattr_hooks.<locals>.BNr  r;   r9  r;   r<   r#    s   r#  c                       s   e Zd Z Z ZdS )z7ClassPropertiesAndMethods.test_getattr_hooks.<locals>.CN)r   r   r   rk  r  r;   r9  r;   r<   r     s   r   r  re   rf   rk   c                       s    e Zd Zdd Z fddZdS )zFClassPropertiesAndMethods.test_getattr_hooks.<locals>.EvilGetattributec                 S   s   t |d S r   r  ri  r;   r;   r<   r    s    zRClassPropertiesAndMethods.test_getattr_hooks.<locals>.EvilGetattribute.__getattr__c                    s&    ` tdD ]}t  qt|d S Nru   )r  r   r  Zcollectr  )r6   r9   r   EvilGetattributer;   r<   rk  !  s    
zWClassPropertiesAndMethods.test_getattr_hooks.<locals>.EvilGetattribute.__getattribute__Nr  r;   r=  r;   r<   r>    s   r>  )r  rg  r  rE   rB   r<  )r6   r;  r  r#  r   r;   )r>  rl  r<   test_getattr_hooks  s    
z,ClassPropertiesAndMethods.test_getattr_hooksc                 C   s   |  ttjtt d S r   )rg  r   rD   rk  r2   rx   r;   r;   r<   test_type___getattribute__)  s    z4ClassPropertiesAndMethods.test_type___getattribute__c                 C   sr   |  tttd G dd dt}|  tt|d G dd dt}|  t |`W d    n1 sd0    Y  d S )N__abstractmethods__c                   @   s   e Zd ZdS )z<ClassPropertiesAndMethods.test_abstractmethods.<locals>.metaNr  r;   r;   r;   r<   meta/  s   rB  c                   @   s   e Zd ZdS )z9ClassPropertiesAndMethods.test_abstractmethods.<locals>.XNr  r;   r;   r;   r<   rW  2  s   rW  )rg  r  rE   rD   r  rA  )r6   rB  rW  r;   r;   r<   test_abstractmethods,  s    z.ClassPropertiesAndMethods.test_abstractmethodsc                 C   s   G dd d}| }|  |t | t t| W d    n1 sJ0    Y  | t t|d W d    n1 s0    Y  d S )Nc                   @   s   e Zd ZeZdS )z:ClassPropertiesAndMethods.test_proxy_call.<locals>.FakeStrN)r   r   r   r  r   r;   r;   r;   r<   FakeStr8  s   rD  r  )r   r  rg  r   r  rP   )r6   rD  Zfake_strr;   r;   r<   test_proxy_call7  s    (z)ClassPropertiesAndMethods.test_proxy_callc                 C   s<   G dd d}|j |_| }| tt| | tt| d S )Nc                   @   s   e Zd ZdS )z7ClassPropertiesAndMethods.test_repr_as_str.<locals>.FooNr  r;   r;   r;   r<   r  J  s   r  )r   r   rg  r  r  r   )r6   r  r   r;   r;   r<   test_repr_as_strG  s
    z*ClassPropertiesAndMethods.test_repr_as_strc                 C   s>   G dd dt }| }d|_| |d d | ||  d S )Nc                   @   s   e Zd ZejZejZdS )z>ClassPropertiesAndMethods.test_mixing_slot_wrappers.<locals>.XN)r   r   r   r   ra   rn  r   __neg__r;   r;   r;   r<   rW  R  s   rW  r   rc  )r   rc  rB   )r6   rW  r7  r;   r;   r<   test_mixing_slot_wrappersQ  s
    z3ClassPropertiesAndMethods.test_mixing_slot_wrappersc                 C   s~   G dd dt }| }| t ||k W d    n1 s>0    Y  | t ||  W d    n1 sp0    Y  d S )Nc                   @   s   e Zd ZejZejZdS )zBClassPropertiesAndMethods.test_wrong_class_slot_wrapper.<locals>.AN)r   r   r   r  r  rP   r;   r;   r;   r<   r  ]  s   r  )r)   rg  r   )r6   r  r?   r;   r;   r<   test_wrong_class_slot_wrapperZ  s    &z7ClassPropertiesAndMethods.test_wrong_class_slot_wrapperc                 C   sR   |  t}G dd d}W d    n1 s.0    Y  t|j}| d| d S )Nc                   @   s   e Zd ZdgZdZdS )zEClassPropertiesAndMethods.test_slot_shadows_class_variable.<locals>.Xr   N)r   r   r   r   r   r;   r;   r;   r<   rW  h  s   rW  z0'foo' in __slots__ conflicts with class variable)rg  r  r  r%  rB   )r6   r  rW  rL   r;   r;   r<    test_slot_shadows_class_variablef  s    ,
z:ClassPropertiesAndMethods.test_slot_shadows_class_variablec                 C   s   G dd d}d|_ | |j d | t&}ttjd td W d    n1 sX0    Y  | dt	|j
 | t$}t|jd | W d    n1 s0    Y  | dt	|j
 | |j d d S )Nc                   @   s   e Zd ZdZdS )z1ClassPropertiesAndMethods.test_set_doc.<locals>.XZelephantNr]  r;   r;   r;   r<   rW  o  s   rW  Zbananar  Zblahzcan't set list.__doc__zcan't delete X.__doc__)r  rB   rg  r   rD   r2   rF   r  re  r  r%  r8  )r6   rW  r  r;   r;   r<   test_set_docn  s    42z&ClassPropertiesAndMethods.test_set_docc                 C   s4  t jtjtjtjg}g d}t||D ]\}}| t	|j
|d  q&|D ]$}|jjd |j
 }| |j| qJ| t jjd | tjjd | tjjd | tjjd G dd	 d	}| t |`W d    n1 s0    Y  | tt	jd
 jt d G dd da| tjd | tjjd d S )N)r  memberZgetsetwrapperZ_descriptor.z	str.lowerzcomplex.realz
float.realzint.__add__c                   @   s   e Zd ZdS )z2ClassPropertiesAndMethods.test_qualname.<locals>.XNr  r;   r;   r;   r<   rW    s   rW  r   ZOinkc                   @   s   e Zd ZG dd dZdS )rX  c                   @   s   e Zd ZdS )Y.InsideNr  r;   r;   r;   r<   Inside  s   rP  N)r   r   r   rP  r;   r;   r;   r<   rX    s   rX  rO  )r  rF  r   r   r*   r)   rP   r  rB   rD   r   r   r   rg  r   rF   r  rX  rP  )r6   Zdescriptorsr  rJ   nqualnamerW  r;   r;   r<   test_qualname{  s(    "z'ClassPropertiesAndMethods.test_qualnamec                 C   s^   ddi}t dd|}| |jd | d|j | |ddi ddi}| tt dd| d S )Nr   z	some.namer  r;   re   )rD   rB   r   r  rF   rg  r   )r6   rF  r  r;   r;   r<   test_qualname_dict  s    z,ClassPropertiesAndMethods.test_qualname_dictc                 C   s^   G dd dt }| }d|_t|}~t  | |  t D ]}| 	t
|| qDd S )Nc                   @   s   e Zd Zdd ZdS )z<ClassPropertiesAndMethods.test_cycle_through_dict.<locals>.Xc                 S   s   t |  | | _d S r   )r   r0   rF   rx   r;   r;   r<   r0     s    
zEClassPropertiesAndMethods.test_cycle_through_dict.<locals>.X.__init__Nr  r;   r;   r;   r<   rW    s   rW  r   )r   r  r  r  r   r  assertIsNoner  r  assertIsNotrD   )r6   rW  r7  wrr  r;   r;   r<   test_cycle_through_dict  s    
z1ClassPropertiesAndMethods.test_cycle_through_dictc                 C   s   G dd d}|  t|d | j t|dd G dd d}G dd d}G d	d
 d
||}|||fD ]>}|d |ddd |  t|ddd | j t|dddd qdd S )Nc                   @   s   e Zd ZdS )z[ClassPropertiesAndMethods.test_object_new_and_init_with_parameters.<locals>.OverrideNeitherNr  r;   r;   r;   r<   OverrideNeither  s   rY  re   r  c                   @   s   e Zd ZdddZdS )zWClassPropertiesAndMethods.test_object_new_and_init_with_parameters.<locals>.OverrideNewr   c                 _   s   t j| g|R i |S r   rF  )r   r   r   r7   r   r;   r;   r<   r     s    z_ClassPropertiesAndMethods.test_object_new_and_init_with_parameters.<locals>.OverrideNew.__new__N)r   r  r;   r;   r;   r<   OverrideNew  s   rZ  c                   @   s   e Zd ZdddZdS )zXClassPropertiesAndMethods.test_object_new_and_init_with_parameters.<locals>.OverrideInitr   c                 _   s   t j| g|R i |S r   )r  r0   )r6   r   r   r7   r8   r;   r;   r<   r0     s    zaClassPropertiesAndMethods.test_object_new_and_init_with_parameters.<locals>.OverrideInit.__init__N)r   r  r;   r;   r;   r<   OverrideInit  s   r[  c                   @   s   e Zd ZdS )zXClassPropertiesAndMethods.test_object_new_and_init_with_parameters.<locals>.OverrideBothNr  r;   r;   r;   r<   OverrideBoth  s   r\  rf   rh   r>  r  )r6   rY  rZ  r[  r\  Zcaser;   r;   r<   (test_object_new_and_init_with_parameters  s    zBClassPropertiesAndMethods.test_object_new_and_init_with_parametersc                 C   s>   G dd d}G dd d|}|  d|j | d|j d S )Nc                   @   s   e Zd ZdS )z\ClassPropertiesAndMethods.test_subclassing_does_not_duplicate_dict_descriptors.<locals>.BaseNr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )z[ClassPropertiesAndMethods.test_subclassing_does_not_duplicate_dict_descriptors.<locals>.SubNr  r;   r;   r;   r<   r    s   r  rF   )re  rF   r  )r6   r  r  r;   r;   r<   4test_subclassing_does_not_duplicate_dict_descriptors  s    zNClassPropertiesAndMethods.test_subclassing_does_not_duplicate_dict_descriptorsc                    sR  G dd d}|  t| jd G dd d}G dd d|}G dd	 d	|}| }| }| }t||}|  t|jd
 |  t|jd |  t|jd |  t|jd G dd d}| }	|  t|	jd |  t|jd G dd d}
|
 }t }t||}|  t|d d|_|  t|d d|_|  t|d d S )Nc                   @   s   e Zd Zdd ZdS )=ClassPropertiesAndMethods.test_bound_method_repr.<locals>.Fooc                 S   s   d S r   r;   rx   r;   r;   r<   r    s    DClassPropertiesAndMethods.test_bound_method_repr.<locals>.Foo.methodNr   r   r   r  r;   r;   r;   r<   r    s   r  z4<bound method .*Foo\.method of <.*Foo object at .*>>c                   @   s   e Zd Zdd ZdS )z>ClassPropertiesAndMethods.test_bound_method_repr.<locals>.Basec                 S   s   d S r   r;   rx   r;   r;   r<   r    s    zEClassPropertiesAndMethods.test_bound_method_repr.<locals>.Base.methodNra  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )zBClassPropertiesAndMethods.test_bound_method_repr.<locals>.Derived1Nr  r;   r;   r;   r<   Derived1  s   rb  c                   @   s   e Zd Zdd ZdS )zBClassPropertiesAndMethods.test_bound_method_repr.<locals>.Derived2c                 S   s   d S r   r;   rx   r;   r;   r<   r    s    zIClassPropertiesAndMethods.test_bound_method_repr.<locals>.Derived2.methodNra  r;   r;   r;   r<   Derived2  s   rc  z6<bound method .*Base\.method of <.*Base object at .*>>z:<bound method .*Base\.method of <.*Derived1 object at .*>>z><bound method .*Derived2\.method of <.*Derived2 object at .*>>z:<bound method .*Base\.method of <.*Derived2 object at .*>>c                   @   s   e Zd Zedd ZdS )r_  c                 S   s   d S r   r;   r   r;   r;   r<   r    s    r`  N)r   r   r   rL  r  r;   r;   r;   r<   r    s   z/<bound method .*Foo\.method of <class '.*Foo'>>c                   @   s   e Zd Zdd ZdS )zDClassPropertiesAndMethods.test_bound_method_repr.<locals>.MyCallablec                 S   s   d S r   r;   r  r;   r;   r<   r    s    zMClassPropertiesAndMethods.test_bound_method_repr.<locals>.MyCallable.__call__N)r   r   r   r  r;   r;   r;   r<   
MyCallable  s   rd  z*<bound method \? of <object object at .*>>r9   z,<bound method name of <object object at .*>>rR  z0<bound method qualname of <object object at .*>>)	ZassertRegexr   r  r  r  r  
MethodTyper   r   )r6   r  r  rb  rc  rJ  Zderived1Zderived2Zsuper_d2r   rd  rU  instancer  r  r;   r<   test_bound_method_repr  s\    



z0ClassPropertiesAndMethods.test_bound_method_reprNzneed the _testcapi modulec                    s*   G dd d G  fddd}|j  d S )Nc                   @   s   e Zd ZejZdS )z6ClassPropertiesAndMethods.test_bpo25750.<locals>.DescrN)r   r   r   r  Zbad_getr  r;   r;   r;   r<   r    s   r  c                       s   e Zd Z  Zdd ZdS )z2ClassPropertiesAndMethods.test_bpo25750.<locals>.Xc                 S   s   d | _ dd tdD | _d S )Nc                 S   s   g | ]}d | qS r  r;   r|  r;   r;   r<   r~    r   zNClassPropertiesAndMethods.test_bpo25750.<locals>.X.__new__.<locals>.<listcomp>i'  )rl  r   r  r   r;   r;   r<   r     s    z:ClassPropertiesAndMethods.test_bpo25750.<locals>.X.__new__N)r   r   r   rl  r   r;   r  r;   r<   rW    s   rW  r9  r  r;   r  r<   test_bpo25750  s    z'ClassPropertiesAndMethods.test_bpo25750)r   r   r   r   r   r   r   rh  r  r  r  r  r  r  r  r  r  r  r  r  r  r
  r  r  r   Zrefcount_testr!  r   r)  r,  r-  r.  r1  r=  r@  r.   ZexpectedFailurerB  rJ  rR  r\  re  ri  rj  r  r  r  r  skipIfr   flagsoptimizer  cpython_onlyr  r  r  r  r   rK  rR  rX  re  rj  rp  ru  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  r  r  r"  r$  r%  r3  r6  r:  r?  r@  rC  rE  rF  rH  rI  rJ  rK  rS  rT  rX  r]  r^  rg  r  rh  r  r;   r;   r  r<   r     s  4  X*)%%= K&(F<2

1

"
"
G1
ib?


CS\p  N @OYYM	.
',	A( 63
+'!
4'
	 
7r   c                   @   s   e Zd Zdd Zeeedo$e ddd Z	eeedoFe ddd Z
eeedohe dd	d
 Zdd Zdd ZdS )DictProxyTestsc                 C   s   G dd dt }|| _d S )Nc                   @   s   e Zd Zdd ZdS )zDictProxyTests.setUp.<locals>.Cc                 S   s   d S r   r;   rx   r;   r;   r<   rI     s    z$DictProxyTests.setUp.<locals>.C.methNr   r;   r;   r;   r<   r     s   r   )r  r   r   r;   r;   r<   setUp  s    zDictProxyTests.setUpgettracez#trace function introduces __local__c                 C   s<   | j j }| |t t|}|  | |g d d S )NrF   r  r   r  rI   )r   rF   r{   assertNotIsInstancer2   sortrB   r6   r  r{   r;   r;   r<   test_iter_keys  s
    zDictProxyTests.test_iter_keysc                 C   s4   | j j }| |t t|}| t|d d S r<  )r   rF   r  rq  r2   rB   r   )r6   r  r  r;   r;   r<   test_iter_values*  s    zDictProxyTests.test_iter_valuesc                 C   sB   | j j }| |t dd |D }|  | |g d d S )Nc                 S   s   g | ]}|d  qS r  r;   )r}  itemr;   r;   r<   r~  9  r   z2DictProxyTests.test_iter_items.<locals>.<listcomp>rp  )r   rF   r3   rq  r2   rr  rB   rs  r;   r;   r<   test_iter_items3  s
    zDictProxyTests.test_iter_itemsc                 C   sN   G dd dt }G dd dt}G dd d|d}| t|jt|j d S )Nc                   @   s   e Zd ZdS )z7DictProxyTests.test_dict_type_with_metaclass.<locals>.BNr  r;   r;   r;   r<   r#  @  s   r#  c                   @   s   e Zd ZdS )z7DictProxyTests.test_dict_type_with_metaclass.<locals>.MNr  r;   r;   r;   r<   r  B  s   r  c                   @   s   e Zd ZdS )z7DictProxyTests.test_dict_type_with_metaclass.<locals>.CNr  r;   r;   r;   r<   r   D  s   r   r   )r  rD   rB   rF   )r6   r#  r  r   r;   r;   r<   test_dict_type_with_metaclass>  s    z,DictProxyTests.test_dict_type_with_metaclassc                 C   s^   t | jj}| |d| | |d| | jj D ]\}}| d||| q<d S )Nzmappingproxy()z
{!r}: {!r})	r   r   rF   r   r  endswithr3   re  r  )r6   r  r   r   r;   r;   r<   	test_reprI  s
    zDictProxyTests.test_reprN)r   r   r   rn  r.   ri  r   r   ro  rt  ru  rw  rx  r{  r;   r;   r;   r<   rm    s   
	

	rm  c                   @   s   e Zd Zdd ZdS )AAAPTypesLongInitTestc                 C   s>   G dd dt }ztd| d W n   Y n0 tt d S )Nc                   @   s   e Zd Zdd ZdS )z>AAAPTypesLongInitTest.test_pytype_long_ready.<locals>.UserLongc                 W   s   d S r   r;   r=  r;   r;   r<   r  a  s    zFAAAPTypesLongInitTest.test_pytype_long_ready.<locals>.UserLong.__pow__N)r   r   r   r  r;   r;   r;   r<   UserLong`  s   r}  r   )r  r   rD   rT  r  )r6   r}  r;   r;   r<   test_pytype_long_readyY  s    z,AAAPTypesLongInitTest.test_pytype_long_readyN)r   r   r   r~  r;   r;   r;   r<   r|  T  s   r|  c                   @   s   e Zd Zdd ZdS )	MiscTestsc                    sj   G  fdddt }G dd dt }G dd dt  td|f| di| jd	 | jd
 d S )Nc                       s"   e Zd Zdd Z fddZdS )z7MiscTests.test_type_lookup_mro_reference.<locals>.MyKeyc                 S   s   t dS )Nmykeyr  rx   r;   r;   r<   r  s  s    z@MiscTests.test_type_lookup_mro_reference.<locals>.MyKey.__hash__c                    s    f_ d S r   r  r   Base2rW  r;   r<   r  v  s    z>MiscTests.test_type_lookup_mro_reference.<locals>.MyKey.__eq__Nr  r;   r  r;   r<   MyKeyr  s   r  c                   @   s   e Zd ZdZdZdS )z6MiscTests.test_type_lookup_mro_reference.<locals>.Base	from BaseNr   r   r   r  mykey2r;   r;   r;   r<   r  y  s   r  c                   @   s   e Zd ZdZdZdS )z7MiscTests.test_type_lookup_mro_reference.<locals>.Base2
from Base2Nr  r;   r;   r;   r<   r  }  s   r  rW  ru   r  r  )r  rD   rB   r  r  )r6   r  r  r;   r  r<   test_type_lookup_mro_referencen  s    z(MiscTests.test_type_lookup_mro_referenceN)r   r   r   r  r;   r;   r;   r<   r  m  s   r  c                   @   sf   e Zd Zdi dddfddZdd Zdd Zdd	d
Zedd Zdd Z	dd Z
dd Zdd ZdS )PicklingTestsr;   Nc           
      C   sB  |dkr| |}|rD| |d tj | |d t|||f n,| |d tj | |d t|f|  | |d | |d ur| t|d | n| |d  |d ur| 	t
|d | n| |d  ndt|j}	tjt||	|	tu rd n|	|ff}|d ur||f7 }| | || | | | d S )Nrf   r   re   rh   rk   )__reduce_ex__rB   copyreg__newobj_ex__rD   
__newobj__assertListEqualr2   rU  assertDictEqualr   __base___reconstructorr  
__reduce__)
r6   protor   r7   r8   r   	listitems	dictitemsZreduce_valueZ	base_typer;   r;   r<   _check_reduce  s2    



zPicklingTests._check_reducec              
      s  t tjd }d dddddiG  fdd	d	}| }|D ]}| ||  q@ D ]\}}t||| q\|D ]}| j|| d
 qvG dd d}| }|D ]@}|dkr| t || W d    q1 s0    Y  qG  fddd}| }|D ] }|dkr| ||  qG  fddd}	G fddd}
G dd d}G dd d}|D ]d}|	|
||fD ]P}| }|dkr|| tt	f || W d    n1 s0    Y  q|qlG  fddd}| }|D ]}| ||  qG dd d}| }|D ]F}|dkr| t
 || W d    n1 sV0    Y  qG fddd}| }|D ]}| j||d
 qG dd d}| }|D ]}| j||d d
 qG d!d" d"}| }|D ]z}| t
 || W d    n1 s0    Y  |dk r| t
 |  W d    n1 sN0    Y  qG fd#d$d$}| }|D ]}|dkr| j||d fd
 nj| t || W d    n1 s0    Y  | t |  W d    n1 s0    Y  qxG d%d& d&t}|d'd(i}|D ]}| j||t|d) q*G d*d+ d+t}|d,g}|D ]}| j||t|d- qdd S ).Nre   )ir   i7i)ZbaconZfishcheeseioc                       s   e Zd Z fddZdS )z%PicklingTests.test_reduce.<locals>.C1c                    s    S r   r;   rx   r|  r;   r<   __getnewargs__  s    z4PicklingTests.test_reduce.<locals>.C1.__getnewargs__Nr   r   r   r  r;   r|  r;   r<   r    s   r  r   c                   @   s   e Zd Zdd ZdS )z%PicklingTests.test_reduce.<locals>.C2c                 S   s   dS Nzbad argsr;   rx   r;   r;   r<   r    s    z4PicklingTests.test_reduce.<locals>.C2.__getnewargs__Nr  r;   r;   r;   r<   rR    s   rR  rf   c                       s   e Zd Z fddZdS )z%PicklingTests.test_reduce.<locals>.C3c                    s    fS r   r;   rx   r@  r;   r<   __getnewargs_ex__  s    z7PicklingTests.test_reduce.<locals>.C3.__getnewargs_ex__Nr   r   r   r  r;   r@  r;   r<   r    s   r  c                       s   e Zd Z fddZdS )z%PicklingTests.test_reduce.<locals>.C4c                    s    dfS )Nzbad dictr;   rx   r|  r;   r<   r    s    z7PicklingTests.test_reduce.<locals>.C4.__getnewargs_ex__Nr  r;   r|  r;   r<   r    s   r  c                       s   e Zd Z fddZdS )z%PicklingTests.test_reduce.<locals>.C5c                    s   d fS )Nz	bad tupler;   rx   r8   r;   r<   r    s    z7PicklingTests.test_reduce.<locals>.C5.__getnewargs_ex__Nr  r;   r  r;   r<   C5  s   r  c                   @   s   e Zd Zdd ZdS )z%PicklingTests.test_reduce.<locals>.C6c                 S   s   dS )Nr;   r;   rx   r;   r;   r<   r    s    z7PicklingTests.test_reduce.<locals>.C6.__getnewargs_ex__Nr  r;   r;   r;   r<   C6  s   r  c                   @   s   e Zd Zdd ZdS )z%PicklingTests.test_reduce.<locals>.C7c                 S   s   dS r  r;   rx   r;   r;   r<   r    s    z7PicklingTests.test_reduce.<locals>.C7.__getnewargs_ex__Nr  r;   r;   r;   r<   C7  s   r  c                       s   e Zd Z fddZdS )z%PicklingTests.test_reduce.<locals>.C9c                    s    i fS r   r;   rx   r|  r;   r<   r    s    z7PicklingTests.test_reduce.<locals>.C9.__getnewargs_ex__Nr  r;   r|  r;   r<   C9  s   r  c                   @   s   e Zd Zdd ZdS )z&PicklingTests.test_reduce.<locals>.C10c                 S   s   t d S r   r  rx   r;   r;   r<   r    s    z8PicklingTests.test_reduce.<locals>.C10.__getnewargs_ex__Nr  r;   r;   r;   r<   C10  s   r  c                       s   e Zd Z fddZdS )z&PicklingTests.test_reduce.<locals>.C11c                    s    S r   r;   rx   r   r;   r<   r    s    z3PicklingTests.test_reduce.<locals>.C11.__getstate__Nr   r   r   r  r;   r   r;   r<   C11  s   r  c                   @   s   e Zd Zdd ZdS )z&PicklingTests.test_reduce.<locals>.C12c                 S   s   dS )Nnot dictr;   rx   r;   r;   r<   r    s    z3PicklingTests.test_reduce.<locals>.C12.__getstate__Nr  r;   r;   r;   r<   C12  s   r  r  c                   @   s   e Zd Zdd ZdS )z&PicklingTests.test_reduce.<locals>.C13c                 S   s   t d S r   r  rx   r;   r;   r<   r    s    z3PicklingTests.test_reduce.<locals>.C13.__getstate__Nr  r;   r;   r;   r<   C13  s   r  c                       s    e Zd Ze Z fddZdS )z&PicklingTests.test_reduce.<locals>.C14c                    s"      D ]\}}t| || qd S r   r3   r  ro  r   r;   r<   r0   	  s    z/PicklingTests.test_reduce.<locals>.C14.__init__N)r   r   r   r  r   r0   r;   r   r;   r<   C14  s   r  c                   @   s   e Zd ZdS )z&PicklingTests.test_reduce.<locals>.C15Nr  r;   r;   r;   r<   C15  s   r  Zquebeci)r  c                   @   s   e Zd ZdS )z&PicklingTests.test_reduce.<locals>.C16Nr  r;   r;   r;   r<   C16  s   r  Zyukon)r  )r   pickleHIGHEST_PROTOCOLr  r3   r  rg  r   r  r  r  r  r   r2   )r6   	protocolsr  r   r  r9   r   rR  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r;   )r7   r8   r   r<   test_reduce  s    
*

2
.*
,
*,
zPicklingTests.test_reducec                 C   sL   t tjd }G dd d}|D ]&}|dkr0i nd }| j|| |d q d S )Nre   c                   @   s   e Zd Zdd Zdd ZdS )z7PicklingTests.test_special_method_lookup.<locals>.Pickyc                 S   s   i S r   r;   rx   r;   r;   r<   r  &  s    zDPicklingTests.test_special_method_lookup.<locals>.Picky.__getstate__c                 S   s   |dv rt |d S )N)r  r  rK  r  r;   r;   r<   r  )  s    zCPicklingTests.test_special_method_lookup.<locals>.Picky.__getattr__N)r   r   r   r  r  r;   r;   r;   r<   Picky%  s   r  rf   r   )r   r  r  r  )r6   r  r  protocolr   r;   r;   r<   r  #  s
    z(PicklingTests.test_special_method_lookupc                 C   s  |du rd ||}t|jtju r,td| j|||d | jt|t||d t|dr| j|j	|j	|d | j|j	|j	|d t|dr| j
|j|j|d |jD ]@}| jt||t|||d | jt||dt||d|d q| jt|t||d dS )zKUtility method to verify if two objects are copies of each others.
        Nz{!r} is not a copy of {!r}zCobject passed to _assert_is_copy must override the __repr__ method.)r  rF   r   )r  rD   r   r  r  rV  r   r   r  rF   r  r   rB   rE   r   )r6   r   objcopyr  slotr;   r;   r<   _assert_is_copy1  s&    


zPicklingTests._assert_is_copyc                      sD   G dd d  fddt ttjd tjtjhtjtjhD S )zLUtility method to generate the many possible pickle configurations.
        c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	z<PicklingTests._generate_pickle_copiers.<locals>.PickleCopierz&This class copies object using pickle.c                 S   s   || _ || _|| _d S r   )r  dumpsloads)r6   r  r  r  r;   r;   r<   r0   Q  s    zEPicklingTests._generate_pickle_copiers.<locals>.PickleCopier.__init__c                 S   s   |  | || jS r   )r  r  r  r7  r;   r;   r<   r   U  s    zAPicklingTests._generate_pickle_copiers.<locals>.PickleCopier.copyc                 S   s$   d | j| jj| jj| jj| jjS )Nz0PickleCopier(proto={}, dumps={}.{}, loads={}.{}))r  r  r  r   r   r  rx   r;   r;   r<   r   W  s
    zEPicklingTests._generate_pickle_copiers.<locals>.PickleCopier.__repr__N)r   r   r   r  r0   r   r   r;   r;   r;   r<   PickleCopierO  s   r  c                 3   s   | ]} | V  qd S r   r;   )r}  r7   r  r;   r<   	<genexpr>_  r   z9PicklingTests._generate_pickle_copiers.<locals>.<genexpr>re   )		itertoolsproductr   r  r  r  _dumpsr  _loadsr;   r;   r  r<   _generate_pickle_copiersK  s    


z&PicklingTests._generate_pickle_copiersc              	   C   s  G dd da | t tt  d W d    n1 s<0    Y  G dd dt a| t tt d W d    n1 s0    Y  G dd da G dd dt aG dd	 d	t a|  D ]}| j|d
 t  }|	|}| 
|| d|_|	|}| 
|| t }d|_d|_|	|}| 
|| t }d|_d|_|	|}| 
|| W d    q1 st0    Y  qd S )Nc                   @   s   e Zd ZdgZdS )r   r?   Nr  r;   r;   r;   r<   r   j  s   r   r   c                   @   s   e Zd ZdS )r  Nr  r;   r;   r;   r<   r  p  s   r  c                   @   s.   e Zd ZdZdgZdd Zdd Zdd Zd	S )
r   z7A class with __getstate__ and __setstate__ implemented.r?   c              
   S   s^   t | di  }t| jD ]>}|jddD ]*}zt | |||< W q, tyT   Y q,0 q,q|S )NrF   r   r;   )rE   r   rD   r  rF   r   r  )r6   r   r   r  r;   r;   r<   r  x  s    
zC.__getstate__c                 S   s"   |  D ]\}}t| || qd S r   r  )r6   r   r   r   r;   r;   r<   r    s    zC.__setstate__c                 S   s   dt | j|  f S )Nz%s()<%r>)rD   r   r  rx   r;   r;   r<   r     s    z
C.__repr__N)r   r   r   r  r   r  r  r   r;   r;   r;   r<   r   u  s
   	c                   @   s   e Zd ZdZdS )r  z!A subclass of a class with slots.Nr]  r;   r;   r;   r<   r    s   c                   @   s   e Zd ZdZdgZdS )r,  zA subclass with an extra slot.rR   N)r   r   r   r  r   r;   r;   r;   r<   r,    s   r,  )pickle_copierr   r   r   )r   rg  r   r  r  r  r,  r  subTestr   r  r?   rR   )r6   r  r7  rc  r;   r;   r<   test_pickle_slotsd  s6    ,,



zPicklingTests.test_pickle_slotsc           
   	   C   s  G dd da G dd dtaG dd dtaG dd dtaG d	d
 d
tat ttttf}|  }t	||D ]\}}| j
||dv t|di }||ji |}|j}||}| || |dkr|js|j  ||}	| ||	 W d    qp1 s0    Y  qp|D ]}| j
|df t|di }||ji |}t|}| || |js||j  t|}	| ||	 W d    n1 s0    Y  qd S )Nc                       s0   e Zd ZdZdZdZ fddZdd Z  ZS )r  z:The state of this class is copyable via its instance dict.r  Tc                    s   t    || _|| _d S r   )r  r0   r?   rR   r  r  r;   r<   r0     s    
zC1.__init__c                 S   s   d| j | jf S )Nz
C1(%r, %r)rQ   rx   r;   r;   r<   r     s    zC1.__repr__)	r   r   r   r  ARGSNEED_DICT_COPYINGr0   r   r  r;   r;   r  r<   r    s
   r  c                       sH   e Zd ZdZdZdZ fddZ fddZedd	 Z	d
d Z
  ZS )rR  z,A list subclass copyable via __getnewargs__.r  Fc                    s   t  | }||_||_|S r   r  r   r?   rR   )r   r?   rR   r6   r  r;   r<   r     s    z
C2.__new__c                    s   t    | d d S Nr  )r  r0   r|   r=  r  r;   r<   r0     s    
zC2.__init__c                 S   s   | j S r   r  r   r;   r;   r<   r    s    zC2.__getnewargs__c                 S   s   d| j | jt| f S )NzC2(%r, %r)<%r>r?   rR   r2   rx   r;   r;   r<   r     s    zC2.__repr__)r   r   r   r  r  r  r   r0   rL  r  r   r  r;   r;   r  r<   rR    s   
rR  c                   @   s<   e Zd ZdZdZdZdd Zedd Zdd	 Z	d
d Z
dS )r  z*A list subclass copyable via __getstate__.r  Fc                 S   s   || _ || _| d d S r  )r?   rR   r|   r  r;   r;   r<   r0     s    zC3.__init__c                 S   s   | j S r   r  r   r;   r;   r<   r    s    zC3.__getstate__c                 S   s   |\}}|| _ || _d S r   rQ   )r6   r   r?   rR   r;   r;   r<   r    s    zC3.__setstate__c                 S   s   d| j | jt| f S )NzC3(%r, %r)<%r>r  rx   r;   r;   r<   r     s    zC3.__repr__N)r   r   r   r  r  r  r0   rL  r  r  r   r;   r;   r;   r<   r    s   
r  c                       s<   e Zd ZdZdZdZ fddZedd Zdd	 Z	  Z
S )
r  z,An int subclass copyable via __getnewargs__.)r  r  re   Fc                    s   t  | |}||_||_|S r   r  r   r?   rR   r   r6   r  r;   r<   r     s    z
C4.__new__c                 S   s   | j S r   r  r   r;   r;   r<   r    s    zC4.__getnewargs__c                 S   s   d| j | jt| f S )NzC4(%r, %r)<%r>r?   rR   r)   rx   r;   r;   r<   r     s    zC4.__repr__)r   r   r   r  r  r  r   rL  r  r   r  r;   r;   r  r<   r    s   
r  c                       sJ   e Zd ZdZdZddiZdZdd fdd	
Zed
d Z	dd Z
  ZS )r  z/An int subclass copyable via __getnewargs_ex__.r  r   rh   Fr   r4  c                   s   t  | |}||_||_|S r   r  r  r  r;   r<   r     s    z
C5.__new__c                 S   s   | j | jfS r   )r  KWARGSr   r;   r;   r<   r    s    zC5.__getnewargs_ex__c                 S   s   d| j | jt| f S )NzC5(%r, %r)<%r>r  rx   r;   r;   r<   r     s    zC5.__repr__)r   r   r   r  r  r  r  r   rL  r  r   r  r;   r;   r  r<   r    s   
r  )r   r  r  rf   r   )r  r2   rR  r  r)   r  r  r  r  r  r  rE   r  r  r   r  r  rF   rf  r   )
r6   Ztest_classesZpickle_copiersr   r  r8   r   r  r  Zobjcopy2r;   r;   r<   test_reduce_copying  s8    


.
z!PicklingTests.test_reduce_copyingc                    s^   G dd dt G  fddd dd l}|j fd ddifd d f}|   d| d S )	Nc                   @   s   e Zd ZdS )z(PicklingTests.test_issue24097.<locals>.SNr  r;   r;   r;   r<   r  %  s   r  c                       s$   e Zd ZdgZ fddZdS )z(PicklingTests.test_issue24097.<locals>.Ar   c                    s(   |dkr dg j d d < dS td S )Nr   r   )__slotnames__r  r  r  r  r;   r<   r  )  s    z4PicklingTests.test_issue24097.<locals>.A.__getattr__N)r   r   r   r  r  r;   r  r;   r<   r  '  s   
r  r   r   r   rf   )r  r  r  rB   r  )r6   r  r  r;   r  r<   test_issue24097#  s
    	zPicklingTests.test_issue24097c                 C   s   t    | t t  d W d    n1 s60    Y  t  d | t t    W d    n1 sv0    Y  | t t  d  W d    n1 s0    Y  d S r   )r  r  rg  r   r  rx   r;   r;   r<   test_object_reduce4  s    
*(z PicklingTests.test_object_reduce)N)r   r   r   r  r  r  r  r  r  r  r  r  r  r;   r;   r;   r<   r    s   
{

C|r  c                   @   s   e Zd Zejdd ZdS )SharedKeyTestsc                 C   s6  G dd d}G dd d|}| |  }}|  tt|tt| | tt|tddi td\|_|_|_|_	|_
|_| tt|tt| | }|  tt|tt| | tt|tddi td\|_|_
|_	|_|_|_| tt|tddi d S )Nc                   @   s   e Zd ZdS )z)SharedKeyTests.test_subclasses.<locals>.ANr  r;   r;   r;   r<   r  G  s   r  c                   @   s   e Zd ZdS )z)SharedKeyTests.test_subclasses.<locals>.BNr  r;   r;   r;   r<   r#  I  s   r#  r?   re   rv   )rB   r   r  varsZ
assertLessr   r7  rc  r  wr   r  r  rK   r  r  )r6   r  r#  r?   rR   r   r;   r;   r<   test_subclassesD  s           zSharedKeyTests.test_subclassesN)r   r   r   r   rl  r  r;   r;   r;   r<   r  B  s   r  c                   @   s    e Zd ZdZdd Zdd ZdS )DebugHelperMetaz<
    Sets default __doc__ and simplifies repr() output.
    c                 C   s&   | dd u r||d< t| |||S )Nr  )r   rD   r   )rE  r9   r  r  r;   r;   r<   r   ^  s    zDebugHelperMeta.__new__c                 C   s
   t | jS r   )r   r   r   r;   r;   r<   r   b  s    zDebugHelperMeta.__repr__N)r   r   r   r  r   r   r;   r;   r;   r<   r  Z  s   r  c                   @   sh   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )MroTestz
    Regressions for some bugs revealed through
    mcsl.mro() customization (typeobject.c: mro_internal()) and
    cls.__bases__ assignment (typeobject.c: type_set_bases()).
    c                 C   s   d| _ d| _d S )Nr   F)stepreadyrx   r;   r;   r<   rn  m  s    zMroTest.setUpc                 C   s    | j |k }|r|  j d7  _ |S r   )r  )r6   limitretr;   r;   r<   
step_untilq  s    
zMroTest.step_untilc                    s*   G  fdddt }G dd d|d}dS )zM
        type_set_bases must be aware that type->tp_mro can be NULL.
        c                       s   e Zd Z fddZdS )z4MroTest.test_incomplete_set_bases_on_self.<locals>.Mc                    s0     dr&| jd u sJ |  jd7  _t| S )Nre   r;   )r  r  rG   rD   rT  r   rx   r;   r<   rT  |  s    
z8MroTest.test_incomplete_set_bases_on_self.<locals>.M.mroNrW  r;   rx   r;   r<   r  {  s   r  c                   @   s   e Zd ZdS )z4MroTest.test_incomplete_set_bases_on_self.<locals>.ANr  r;   r;   r;   r<   r    s   r  r   Nr  r6   r  r  r;   rx   r<   !test_incomplete_set_bases_on_selfw  s    z)MroTest.test_incomplete_set_bases_on_selfc                    sJ   G  fdddt }G dd d|d G dd d }| jd7  _d	S )
z?
        Deep reentrancy must not over-decref old_mro.
        c                       s   e Zd Z fddZdS )z/MroTest.test_reent_set_bases_on_base.<locals>.Mc                    s6   | j d ur,| jdkr,dr,  jd7  _t| S )Nr#  r   r;   )r  r   r  rG   rD   rT  r   r  r6   r;   r<   rT    s    
z3MroTest.test_reent_set_bases_on_base.<locals>.M.mroNrW  r;   r  r;   r<   r    s   r  c                   @   s   e Zd ZdS )z/MroTest.test_reent_set_bases_on_base.<locals>.ANr  r;   r;   r;   r<   r    s   r  r   c                   @   s   e Zd ZdS )z/MroTest.test_reent_set_bases_on_base.<locals>.BNr  r;   r;   r;   r<   r#    s   r#  r;   N)r  rG   )r6   r  r#  r;   r  r<   test_reent_set_bases_on_base  s    	z$MroTest.test_reent_set_bases_on_basec                    sJ   G  fdddt }G dd d|d}G dd d|}G dd	 d	|}d
S )zU
        Similar to test_reent_set_bases_on_base, but may crash differently.
        c                       s   e Zd Z fddZdS )z6MroTest.test_reent_set_bases_on_direct_base.<locals>.Mc                    s4   | j d }|tur* dr*| j d7  _ t| S )Nr   ru   r;   )rG   r  r  rD   rT  )r   rJ  rx   r;   r<   rT    s
    

z:MroTest.test_reent_set_bases_on_direct_base.<locals>.M.mroNrW  r;   rx   r;   r<   r    s   r  c                   @   s   e Zd ZdS )z6MroTest.test_reent_set_bases_on_direct_base.<locals>.ANr  r;   r;   r;   r<   r    s   r  r   c                   @   s   e Zd ZdS )z6MroTest.test_reent_set_bases_on_direct_base.<locals>.BNr  r;   r;   r;   r<   r#    s   r#  c                   @   s   e Zd ZdS )z6MroTest.test_reent_set_bases_on_direct_base.<locals>.CNr  r;   r;   r;   r<   r     s   r   Nr  )r6   r  r  r#  r   r;   rx   r<   #test_reent_set_bases_on_direct_base  s    	z+MroTest.test_reent_set_bases_on_direct_basec                    s   G  fdddt }G dd d|d}G dd d| G dd	 d	|d
_t   jd7  _W d   n1 s~0    Y  dS )aM  
        type_set_bases must check for an inheritance cycle not only through
        MRO of the type, which may be not yet updated in case of reentrance,
        but also through tp_base chain, which is assigned before diving into
        inner calls to mro().

        Otherwise, the following snippet can loop forever:
            do {
                // ...
                type = type->tp_base;
            } while (type != NULL);

        Functions that rely on tp_base (like solid_base and PyType_IsSubtype)
        would not be happy in that case, causing a stack overflow.
        c                       s   e Zd Z fddZdS )z5MroTest.test_reent_set_bases_tp_base_cycle.<locals>.Mc                    s4   j r*| jdkr f_| jdkr*f _t| S )NB1B2r  r   rG   rD   rT  r   r  r  r6   r;   r<   rT    s    

z9MroTest.test_reent_set_bases_tp_base_cycle.<locals>.M.mroNrW  r;   r  r;   r<   r    s   r  c                   @   s   e Zd ZdS )z5MroTest.test_reent_set_bases_tp_base_cycle.<locals>.ANr  r;   r;   r;   r<   r    s   r  r   c                   @   s   e Zd ZdS )z6MroTest.test_reent_set_bases_tp_base_cycle.<locals>.B1Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )z6MroTest.test_reent_set_bases_tp_base_cycle.<locals>.B2Nr  r;   r;   r;   r<   r    s   r  Tr;   N)r  r  rg  r   rG   r  r;   r  r<   "test_reent_set_bases_tp_base_cycle  s    	z*MroTest.test_reent_set_bases_tp_base_cyclec                    s   G  fdddt }G dd d|d}G dd d|}G dd	 d	| G d
d d|d_|f_f|_j f   g | g  |jf  |g dS )a  
        type_set_bases must check for reentrancy upon finishing its job
        by updating tp_subclasses of old/new bases of the type.
        Otherwise, an implicit inheritance cycle through tp_subclasses
        can break functions that recurse on elements of that field
        (like recurse_down_subclasses and mro_hierarchy) eventually
        leading to a stack overflow.
        c                       s   e Zd Z fddZdS )z;MroTest.test_tp_subclasses_cycle_in_update_slots.<locals>.Mc                    s(   j r| jdkrd_  f_t| S Nr   Fr  r   r  r   r6   r;   r<   rT    s    z?MroTest.test_tp_subclasses_cycle_in_update_slots.<locals>.M.mroNrW  r;   r  r;   r<   r    s   r  c                   @   s   e Zd ZdS )z;MroTest.test_tp_subclasses_cycle_in_update_slots.<locals>.ANr  r;   r;   r;   r<   r    s   r  r   c                   @   s   e Zd ZdS )z<MroTest.test_tp_subclasses_cycle_in_update_slots.<locals>.B1Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )z<MroTest.test_tp_subclasses_cycle_in_update_slots.<locals>.B2Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )z;MroTest.test_tp_subclasses_cycle_in_update_slots.<locals>.CNr  r;   r;   r;   r<   r     s   r   TN)r  r  rG   rB   r  r6   r  r  r  r;   r  r<   (test_tp_subclasses_cycle_in_update_slots  s    	z0MroTest.test_tp_subclasses_cycle_in_update_slotsc                    s   G dd dt G  fdddt}G dd d|d}G dd	 d	|}G d
d d| G dd d|d_ |f_W d   n1 s0    Y  f|_j f jtt	 dS )z
        The same as test_tp_subclasses_cycle_in_update_slots, but tests
        a code path executed on error (goto bail).
        c                   @   s   e Zd ZdS )z=MroTest.test_tp_subclasses_cycle_error_return_path.<locals>.ENr  r;   r;   r;   r<   r,    s   r,  c                       s   e Zd Z fddZdS )z=MroTest.test_tp_subclasses_cycle_error_return_path.<locals>.Mc                    s:   j r0| jdkr0j fkr$d_ n f_t| S r  r  r   r  r   r,  r6   r;   r<   rT    s    zAMroTest.test_tp_subclasses_cycle_error_return_path.<locals>.M.mroNrW  r;   r  r;   r<   r    s   r  c                   @   s   e Zd ZdS )z=MroTest.test_tp_subclasses_cycle_error_return_path.<locals>.ANr  r;   r;   r;   r<   r    s   r  r   c                   @   s   e Zd ZdS )z>MroTest.test_tp_subclasses_cycle_error_return_path.<locals>.B1Nr  r;   r;   r;   r<   r    s   r  c                   @   s   e Zd ZdS )z>MroTest.test_tp_subclasses_cycle_error_return_path.<locals>.B2Nr  r;   r;   r;   r<   r  
  s   r  c                   @   s   e Zd ZdS )z=MroTest.test_tp_subclasses_cycle_error_return_path.<locals>.CNr  r;   r;   r;   r<   r     s   r   TN)
r  r  r  rg  rG   rB   r  r  rD   rT  r  r;   r  r<   *test_tp_subclasses_cycle_error_return_path  s    
&z2MroTest.test_tp_subclasses_cycle_error_return_pathc                    s*   G  fdddt }G dd d|d}dS )z
        Extending an unitialized type with type->tp_mro == NULL must
        throw a reasonable TypeError exception, instead of failing
        with PyErr_BadInternalCall.
        c                       s   e Zd Z fddZdS )z)MroTest.test_incomplete_extend.<locals>.Mc                    sX   | j d u rN| jdkrN t  G dd d| }W d    n1 sD0    Y  t| S )NrW  c                   @   s   e Zd ZdS )z8MroTest.test_incomplete_extend.<locals>.M.mro.<locals>.XNr  r;   r;   r;   r<   rW  !  s   )r  r   rg  r   rD   rT  )r   rW  rx   r;   r<   rT    s    .z-MroTest.test_incomplete_extend.<locals>.M.mroNrW  r;   rx   r;   r<   r    s   r  c                   @   s   e Zd ZdS )z)MroTest.test_incomplete_extend.<locals>.ANr  r;   r;   r;   r<   r  &  s   r  r   Nr  r  r;   rx   r<   test_incomplete_extend  s    	zMroTest.test_incomplete_extendc                    s*   G  fdddt }G dd d|d}dS )z
        Attribute lookup on a super object must be aware that
        its target type can be uninitialized (type->tp_mro == NULL).
        c                       s   e Zd Z fddZ  ZS )z(MroTest.test_incomplete_super.<locals>.Mc                    sJ   | j d u r@t t| | j W d    n1 s60    Y  t| S r   )r  rg  r  r  ZxxxrD   rT  r   r  r;   r<   rT  /  s    
*z,MroTest.test_incomplete_super.<locals>.M.mro)r   r   r   rT  r  r;   rx   r  r<   r  .  s   r  c                   @   s   e Zd ZdS )z(MroTest.test_incomplete_super.<locals>.ANr  r;   r;   r;   r<   r  6  s   r  r   Nr  r  r;   rx   r<   test_incomplete_super)  s    zMroTest.test_incomplete_superc                    sd   G dd d G  fdddt | t" G dd dd}W d   n1 sV0    Y  dS )	z
        gh-92112: A custom mro() returning a result conflicting with
        __bases__ and deleting itself caused a double free.
        c                   @   s   e Zd ZdS )z/MroTest.test_disappearing_custom_mro.<locals>.BNr  r;   r;   r;   r<   r#  >  s   r#  c                       s   e Zd Z fddZdS )z/MroTest.test_disappearing_custom_mro.<locals>.Mc                    s
   `  fS r   )rT  r   r#  r  r;   r<   rT  B  s    z3MroTest.test_disappearing_custom_mro.<locals>.M.mroNrW  r;   r  r;   r<   r  A  s   r  c                   @   s   e Zd ZdS )z/MroTest.test_disappearing_custom_mro.<locals>.ANr  r;   r;   r;   r<   r  G  s   r  r   N)r  rg  r   rI  r;   r  r<   test_disappearing_custom_mro9  s    z$MroTest.test_disappearing_custom_mroN)r   r   r   r  rn  r  r  r  r  r  r  r  r  r  r  r;   r;   r;   r<   r  f  s   $$"r  __main__) r  r  r  r  r  r  rv  rx  r   r  r.   rN  r  r   r   r  r   r  r  r/   r   r   rm  r|  r  r  r  rD   r  r  r   mainr;   r;   r;   r<   <module>   s   
  x                                   -<   = f
