o
    IXh&                    @   s  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mZ d dlmZ dadZG dd dZG dd	 d	Zd
d Zdd ZG dd dZG dd dZG dd dejZejd-ddZG dd deZG dd deZG dd dejZG dd deZ d dlm!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&d(Z'd)e'iZ(d*d+ Z)e*d,kre)  dS dS ).    N)support)script_helper	ALWAYS_EQ)
gc_collectZfoobarc                   @      e Zd Zdd ZdS )Cc                 C      d S N selfr
   r
   ;/opt/python-3.10.19/usr/lib/python3.10/test/test_weakref.pymethod      zC.methodN)__name__
__module____qualname__r   r
   r
   r
   r   r          r   c                   @      e Zd ZdZdd ZdS )CallableNc                 C   
   || _ d S r	   bar)r   xr
   r
   r   __call__       
zCallable.__call__)r   r   r   r   r   r
   r
   r
   r   r      s    r   c                  C   s   dd } | S )Nc                   S   r   r	   r
   r
   r
   r
   r   f%       zcreate_function.<locals>.fr
   r   r
   r
   r   create_function$   s   r   c                   C   s   t  jS r	   )r   r   r
   r
   r
   r   create_bound_method(      r    c                   @   sD   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dS )Objectc                 C   r   r	   arg)r   r$   r
   r
   r   __init__-   r   zObject.__init__c                 C   s
   d| j  S )Nz<Object %r>r#   r   r
   r
   r   __repr__/   r   zObject.__repr__c                 C   s   t |tr| j|jkS tS r	   
isinstancer"   r$   NotImplementedr   otherr
   r
   r   __eq__1      
zObject.__eq__c                 C   s   t |tr| j|jk S tS r	   r'   r*   r
   r
   r   __lt__5   r-   zObject.__lt__c                 C   
   t | jS r	   )hashr$   r   r
   r
   r   __hash__9   r   zObject.__hash__c                 C      dS )N   r
   r   r
   r
   r   some_method;   r   zObject.some_methodc                 C   r2   )N   r
   r   r
   r
   r   other_method=   r   zObject.other_methodN)
r   r   r   r%   r&   r,   r.   r1   r4   r6   r
   r
   r
   r   r"   ,   s    r"   c                   @   r   )RefCyclec                 C   s
   | | _ d S r	   )cycler   r
   r
   r   r%   B   r   zRefCycle.__init__Nr   r   r   r%   r
   r
   r
   r   r7   A   r   r7   c                   @      e Zd Zdd Zdd ZdS )TestBasec                 C   s
   d| _ d S Nr   cbcalledr   r
   r
   r   setUpH   r   zTestBase.setUpc                 C   s   |  j d7  _ d S N   r=   )r   refr
   r
   r   callbackK      zTestBase.callbackN)r   r   r   r?   rC   r
   r
   r
   r   r;   F   s    r;   -C6?c              	   #   s|    d fdd}t  & tj|d}|  zdV  W d|  nd|  w W d   dS 1 s7w   Y  dS )zR
    Ensure GC collections happen in a different thread, at a high frequency.
    Fc                      s"   st   t  rd S d S r	   )timesleepgccollectr
   periodZplease_stopr
   r   rI   V   s   
z"collect_in_thread.<locals>.collect)targetNT)r   Z
disable_gc	threadingThreadstartjoin)rK   rI   tr
   rJ   r   collect_in_threadO   s   

"rR   c                   @   s  e Zd Zdd Zdd Zejdd Zdd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Z d9d: Z!d;d< Z"d=d> Z#d?d@ Z$dAdB Z%dCdD Z&dEdF Z'dGdH Z(dIdJ Z)dKdL Z*dMdN Z+dOdP Z,dQdR Z-dSdT Z.dUdV Z/dWdX Z0dYdZ Z1d[d\ Z2d]d^ Z3d_d` Z4dadb Z5dcdd Z6dedf Z7dgdh Z8diS )jReferencesTestCasec                 C   sD   |  t |  t |  t t }t|}t| ~t| d S r	   )check_basic_refr   r   r    weakrefrB   repr)r   owrr
   r
   r   test_basic_refg   s   



z!ReferencesTestCase.test_basic_refc                 C   s"   |  t |  t |  t d S r	   )check_basic_callbackr   r   r    r   r
   r
   r   test_basic_callbacku   s   

z&ReferencesTestCase.test_basic_callbackc                 C   sR   dd l }|j}| }t|}| | | ~| |  | | | | d S r<   )	_testcapicreate_cfunctionrU   rB   assertIsassertIsNonerT   rZ   )r   r\   r]   r   rX   r
   r
   r   test_cfunctionz   s   

z!ReferencesTestCase.test_cfunctionc                 C   sZ   t  }t|| j}t|| j}~t  | | d | | d | | jdd d S )Nz$expected reference to be invalidated   z-callback not called the right number of times)r   rU   rB   rC   r   r_   assertEqualr>   r   rW   ref1ref2r
   r
   r   test_multiple_callbacks   s   
z*ReferencesTestCase.test_multiple_callbacksc                 C   s2   | fdd}t  }t||| _t||}~d S )Nc                 S   s   |   d S r	   rB   )objectr   r
   r
   r   rC         zDReferencesTestCase.test_multiple_selfref_callbacks.<locals>.callback)r   rU   rB   )r   rC   crd   r
   r
   r   test_multiple_selfref_callbacks   s
   z2ReferencesTestCase.test_multiple_selfref_callbacksc                 C   s   t  }| jttj|d d d S )N)rC   )r   assertRaises	TypeErrorrU   rB   )r   rj   r
   r
   r   test_constructor_kwargs   s   z*ReferencesTestCase.test_constructor_kwargsc                 C   s   t  }d|_t|| j}t|| j}~t  dd }| t|| | t|| tt  }t  | tt| | 	| j
d d S )NrA   c                 S   
   | j  d S r	   r   )proxyr
   r
   r   check   r   z0ReferencesTestCase.test_proxy_ref.<locals>.checkra   )r   r   rU   rp   rC   r   rl   ReferenceErrorboolrb   r>   )r   rW   rd   re   rq   Zref3r
   r
   r   test_proxy_ref   s   z!ReferencesTestCase.test_proxy_refc                 C   s6   | }t |}| | d | }| ||d d S )Nz,weak reference to live object should be livez-<ref>() should return original object if live)rU   rB   assertIsNotNoner^   )r   factoryrW   rB   o2r
   r
   r   rT      s   
z"ReferencesTestCase.check_basic_refc                 C   sD   d| _ | }t|| j}~t  | | j dd | | d d S )Nr   rA   z(callback did not properly set 'cbcalled'z3ref2 should be dead after deleting object reference)r>   rU   rB   rC   r   rb   r_   )r   rv   rW   rB   r
   r
   r   rZ      s   
z'ReferencesTestCase.check_basic_callbackc                 C   s   t  }t|}t|}t|}| ||d t  }t|}t|}t|}| ||d | t|dd ~t  | t|dd d S )Nz1reference object w/out callback should be re-usedra   zwrong weak ref count for objectrA   z4wrong weak ref count for object after deleting proxy)r   rU   rB   rp   r^   rb   getweakrefcountr   )r   rW   rd   rp   re   r
   r
   r   test_ref_reuse   s,   





z!ReferencesTestCase.test_ref_reusec                 C   s6   t  }t|}t|}t|}| ||d d S )Nz4proxy object w/out callback should have been re-used)r   rU   rp   rB   r^   )r   rW   proxy1rB   proxy2r
   r
   r   test_proxy_reuse   s   


z#ReferencesTestCase.test_proxy_reusec                 C   sn  t  }| |t| t }t|}| |d |d | t	|d | 
|d ddg|d d < | t	|d | t	|d | d|d d|d< | |d d | |d d t|}t|}| || ttd	}t|}| |d d  |d d   | |dd  |dd   | |d d |d d  | |dd |dd  d S )
Nz(proxy for empty UserList should be false   rA   z+proxy for non-empty UserList should be truera      z,proxy didn't support __contains__() properlyr5   
   )r   check_proxyrU   rp   collectionsUserListassertFalseappendrb   len
assertTrueassertInrange)r   rW   LpZL2p2ZL3Zp3r
   r
   r   test_basic_proxy   s0   




 z#ReferencesTestCase.test_basic_proxyc                 C   sF   G dd dt }| }| dtt| | tt|d d S )Nc                   @   r:   )z0ReferencesTestCase.test_proxy_unicode.<locals>.Cc                 S   r2   )Nstringr
   r   r
   r
   r   __str__  r   z8ReferencesTestCase.test_proxy_unicode.<locals>.C.__str__c                 S   r2   )N   bytesr
   r   r
   r
   r   	__bytes__  r   z:ReferencesTestCase.test_proxy_unicode.<locals>.C.__bytes__N)r   r   r   r   r   r
   r
   r
   r   r   
      r   r   r   )rh   r   dirrU   rp   rb   bytes)r   r   instancer
   r
   r   test_proxy_unicode  s   z%ReferencesTestCase.test_proxy_unicodec                 C   s4   G dd d}| }t |}| t|d d S )Nc                   @   r   )z.ReferencesTestCase.test_proxy_index.<locals>.Cc                 S   r2   )Nr   r
   r   r
   r
   r   	__index__  r   z8ReferencesTestCase.test_proxy_index.<locals>.C.__index__N)r   r   r   r   r
   r
   r
   r   r     r   r   r   )rU   rp   rb   operatorindexr   r   rW   r   r
   r
   r   test_proxy_index  s   
z#ReferencesTestCase.test_proxy_indexc                 C   sF   G dd d}| }t |}| |d d |d }| |d d S )Nc                   @   r:   )z,ReferencesTestCase.test_proxy_div.<locals>.Cc                 S   r2   N*   r
   r*   r
   r
   r   __floordiv__  r   z9ReferencesTestCase.test_proxy_div.<locals>.C.__floordiv__c                 S   r2   )N   r
   r*   r
   r
   r   __ifloordiv__  r   z:ReferencesTestCase.test_proxy_div.<locals>.C.__ifloordiv__N)r   r   r   r   r   r
   r
   r
   r   r     r   r   r5   r   r   rU   rp   rb   r   r
   r
   r   test_proxy_div  s   
z!ReferencesTestCase.test_proxy_divc                 C   sV   G dd d}| }t |}| |d d | d| d |d }| |d d S )Nc                   @   s$   e Zd Zdd Zdd Zdd ZdS )z/ReferencesTestCase.test_proxy_matmul.<locals>.Cc                 S   r2   )N  r
   r*   r
   r
   r   
__matmul__)  r   z:ReferencesTestCase.test_proxy_matmul.<locals>.C.__matmul__c                 S   r2   )N]r
   r*   r
   r
   r   __rmatmul__+  r   z;ReferencesTestCase.test_proxy_matmul.<locals>.C.__rmatmul__c                 S   r2   )N1  r
   r*   r
   r
   r   __imatmul__-  r   z;ReferencesTestCase.test_proxy_matmul.<locals>.C.__imatmul__N)r   r   r   r   r   r   r
   r
   r
   r   r   (  s    r   r5   r   r   r   r   r   r
   r
   r   test_proxy_matmul'  s   
z$ReferencesTestCase.test_proxy_matmulc                 C      |  tj d S r	   )check_shared_without_callbackrU   rB   r   r
   r
   r    test_shared_ref_without_callback>     z3ReferencesTestCase.test_shared_ref_without_callbackc                 C   r   r	   )r   rU   rp   r   r
   r
   r   "test_shared_proxy_without_callbackA  r   z5ReferencesTestCase.test_shared_proxy_without_callbackc                 C   s   t d}||d }||d }| ||d ~~||}||d }| ||d ~~||}||}| ||d ~~||d }||}| ||d d S )NrA   z%both callbacks were None in the C APIz&callbacks were NULL, None in the C APIz%both callbacks were NULL in the C APIz&callbacks were None, NULL in the C API)r"   r^   )r   makerefrW   Zp1r   r
   r
   r   r   D  s    



z0ReferencesTestCase.check_shared_without_callbackc                 C   s   t  }t|}| || | t|tjd |d | |jdd |dd | |jdd | 	t
| | 	t
|ddd d S )	Nzproxy is not of callable typez	twinkies!z1call through proxy not passed through to originalzSplat.)r   rA   ra   r~   )r   rU   rp   r   r^   typeCallableProxyTyperb   r   rl   rm   )r   rW   rd   r
   r
   r   test_callable_proxyV  s    



z&ReferencesTestCase.test_callable_proxyc                 C   s   d|_ | |j dd d|_ | |j dd |` | t|dd d|_ | |j dd d|_ | |j dd |` | t|dd	 d S )
NrA   z)proxy does not reflect attribute additionra   z-proxy does not reflect attribute modificationfooz(proxy does not reflect attribute removalz4object does not reflect attribute addition via proxyz8object does not reflect attribute modification via proxyz3object does not reflect attribute removal via proxy)r   rb   r   hasattr)r   rW   rp   r
   r
   r   r   k  s0   



zReferencesTestCase.check_proxyc                 C   s6   G dd d}| }t |}|d= | |jd d S )Nc                   @   r   )z3ReferencesTestCase.test_proxy_deletion.<locals>.FooNc                 S   r   r	   )result)r   Zaccessorr
   r
   r   __delitem__  r   z?ReferencesTestCase.test_proxy_deletion.<locals>.Foo.__delitem__)r   r   r   r   r   r
   r
   r
   r   Foo  s    r   r   )rU   rp   rb   r   )r   r   gr   r
   r
   r   test_proxy_deletion  s
   
z&ReferencesTestCase.test_proxy_deletionc                 C   s4   G dd dt }| }| tt|t| d S )Nc                   @      e Zd ZdS )z0ReferencesTestCase.test_proxy_bool.<locals>.ListNr   r   r   r
   r
   r
   r   List  s    r   )listrb   rs   rU   rp   )r   r   Zlystr
   r
   r   test_proxy_bool  s   z"ReferencesTestCase.test_proxy_boolc                    s^   d  G  fddd}|  t  }| t d|v  W d    d S 1 s(w   Y  d S )Nc                          e Zd Z fddZdS )z1ReferencesTestCase.test_proxy_iter.<locals>.MyObjc                    s    t S r	   )r)   r   objr
   r   __iter__  s   z:ReferencesTestCase.test_proxy_iter.<locals>.MyObj.__iter__Nr   r   r   r   r
   r   r
   r   MyObj      r   Zblech)rU   rp   rl   rm   )r   r   r   r
   r   r   test_proxy_iter  s   

"z"ReferencesTestCase.test_proxy_iterc                    sJ   g d  fdd}| G fddd}| }|  t|g d d S )N)r3   r5      c                   3   s     E d H  d S r	   r
   r
   )arrr
   r   iterator_func  s   z9ReferencesTestCase.test_proxy_next.<locals>.iterator_funcc                       r   )z:ReferencesTestCase.test_proxy_next.<locals>.IteratesWeaklyc                    
   t  S r	   rU   rp   r   itr
   r   r     r   zCReferencesTestCase.test_proxy_next.<locals>.IteratesWeakly.__iter__Nr   r
   r   r
   r   IteratesWeakly  r   r   )rb   r   )r   r   r   Zweak_itr
   )r   r   r   test_proxy_next  s   z"ReferencesTestCase.test_proxy_nextc                    s^   dd  G  fddd}| }d}|  t| t| W d    d S 1 s(w   Y  d S )Nc                   S   r2   r<   r
   r
   r
   r
   r   <lambda>  r   z8ReferencesTestCase.test_proxy_bad_next.<locals>.<lambda>c                       r   )z1ReferencesTestCase.test_proxy_bad_next.<locals>.Ac                    r   r	   r   r   Znot_an_iteratorr
   r   r     r   z:ReferencesTestCase.test_proxy_bad_next.<locals>.A.__iter__Nr   r
   r   r
   r   A  r   r   z'Weakref proxy referenced a non-iterator)ZassertRaisesRegexrm   r   )r   r   amsgr
   r   r   test_proxy_bad_next  s   
"z&ReferencesTestCase.test_proxy_bad_nextc                 C   s4   G dd d}| }|  dtt|d d S )Nc                   @   r:   )z5ReferencesTestCase.test_proxy_reversed.<locals>.MyObjc                 S   r2   )Nr~   r
   r   r
   r
   r   __len__  r   z=ReferencesTestCase.test_proxy_reversed.<locals>.MyObj.__len__c                 S   s   t dS )Ncba)iterr   r
   r
   r   __reversed__  r!   zBReferencesTestCase.test_proxy_reversed.<locals>.MyObj.__reversed__N)r   r   r   r   r   r
   r
   r
   r   r     r   r    r   )rb   rP   reversedrU   rp   r   r   r   r
   r
   r   test_proxy_reversed  s    z&ReferencesTestCase.test_proxy_reversedc                 C   s   G dd d}| }|  t tt| W d    n1 s!w   Y  G dd d}| }|  t tt| W d    d S 1 sHw   Y  d S )Nc                   @   r   )1ReferencesTestCase.test_proxy_hash.<locals>.MyObjc                 S   r2   r   r
   r   r
   r
   r   r1     r   z:ReferencesTestCase.test_proxy_hash.<locals>.MyObj.__hash__Nr   r   r   r1   r
   r
   r
   r   r     r   r   c                   @   s   e Zd ZdZdS )r   Nr   r
   r
   r
   r   r     s    )rl   rm   r0   rU   rp   r   r
   r
   r   test_proxy_hash  s   "z"ReferencesTestCase.test_proxy_hashc                 C   s   t  }t|}t|| j}| t|dd t|}t|| j}| t|dd ~~~~t  | t|dd | tddd d S )Nra   z*got wrong number of weak reference objectsr3   r   zAweak reference objects not unlinked from referent when discarded.rA   z2got wrong number of weak reference objects for int)r   rU   rB   rC   rb   rx   rp   r   )r   rW   rd   re   rz   r{   r
   r
   r   test_getweakrefcount  s&   

z'ReferencesTestCase.test_getweakrefcountc                 C   s   t  }t|| j}t|| j}~t  | t||gd t  }t|| j}t|| j}~t  | t||gd ~t  | t|g d | tdg d d S )Nzlist of refs does not matchzlist of refs not clearedrA   z#list of refs does not match for int)r   rU   rB   rC   r   rb   getweakrefsrc   r
   r
   r   test_getweakrefs  s0   z#ReferencesTestCase.test_getweakrefsc                 C   sF   G dd dt }|d}t|}| |d d | d| d d S )Nc                   @   r   )z6ReferencesTestCase.test_newstyle_number_ops.<locals>.FNr   r
   r
   r
   r   F      r   g       @g      ?g      @)floatrU   rp   rb   )r   r   r   r   r
   r
   r   test_newstyle_number_ops  s
   
z+ReferencesTestCase.test_newstyle_number_opsc                    s   G dd dt  i fdd fdd}z|  W n	  y&   Y nw | d z|  W n
  y;   Y d S w | d d S )Nc                   @   r   )z?ReferencesTestCase.test_callbacks_protected.<locals>.BogusErrorNr   r
   r
   r
   r   
BogusError  r   r   c                    s
    | = d S r	   r
   k)datar
   r   remove  r   z;ReferencesTestCase.test_callbacks_protected.<locals>.removec                     s   dd } d t | <  )Nc                   S   r2   )Nr
   r
   r
   r
   r
   r   r     r   zRReferencesTestCase.test_callbacks_protected.<locals>.encapsulate.<locals>.<lambda>)rU   rB   r   r   r   r   r
   r   encapsulate  s   z@ReferencesTestCase.test_callbacks_protected.<locals>.encapsulatezexception not properly restored)	ExceptionZfail)r   r   r
   r   r   test_callbacks_protected  s    


z+ReferencesTestCase.test_callbacks_protectedc                    sn   dd l  G dd dt}| }t| fdd}~~| }| |_t|j fdd}| }||_~~d S )Nr   c                   @   r   )z0ReferencesTestCase.test_sf_bug_840829.<locals>.CNr   r
   r
   r
   r   r   ;  r   r   c                          S r	   rI   ignorerH   r
   r   r   ?      z7ReferencesTestCase.test_sf_bug_840829.<locals>.<lambda>c                    r   r	   r   r   r   r
   r   r   G  r   )rH   rh   rU   rB   ic1)r   r   rj   rX   r   c2r
   r   r   test_sf_bug_840829.  s   	z%ReferencesTestCase.test_sf_bug_840829c                 C   sV   dd l }G dd dt}G dd dt}| }||_t||j|_~~~|  d S )Nr   c                   @   r   )z4ReferencesTestCase.test_callback_in_cycle.<locals>.JNr   r
   r
   r
   r   JY  r   r   c                   @   r   )z5ReferencesTestCase.test_callback_in_cycle.<locals>.IIc                 S   ro   r	   )r   r   r   r
   r
   r   	acallback]  r   z?ReferencesTestCase.test_callback_in_cycle.<locals>.II.acallbackN)r   r   r   r   r
   r
   r
   r   II\  r   r   )rH   rh   r   rU   rB   r   rX   rI   )r   rH   r   r   Ir
   r
   r   test_callback_in_cycleV  s   z)ReferencesTestCase.test_callback_in_cyclec                 C   sP   dd l }G dd d}| | }}||_||_t||j|_~~|  d S )Nr   c                   @   r   )z=ReferencesTestCase.test_callback_reachable_one_way.<locals>.Cc                 S      | j  | j | j d S r	   mer   rX   r   r
   r
   r   cb     
z@ReferencesTestCase.test_callback_reachable_one_way.<locals>.C.cbNr   r   r   r  r
   r
   r
   r   r     r   r   )rH   r  r   rU   rB   r  rX   rI   )r   rH   r   r   r   r
   r
   r   test_callback_reachable_one_way~  s   z2ReferencesTestCase.test_callback_reachable_one_wayc                 C   sd   dd l }G dd dt}G dd d}| | }}||_||_t||j|_~~~~|  d S )Nr   c                   @   r   )z=ReferencesTestCase.test_callback_different_classes.<locals>.Cc                 S   r   r	   r  r   r
   r
   r   r    r  z@ReferencesTestCase.test_callback_different_classes.<locals>.C.cbNr  r
   r
   r
   r   r     r   r   c                   @   r   )z=ReferencesTestCase.test_callback_different_classes.<locals>.DNr   r
   r
   r
   r   D  r   r  )	rH   rh   r  r   rU   rB   r  rX   rI   )r   rH   r   r  r   r   r
   r
   r   test_callback_different_classes  s   	z2ReferencesTestCase.test_callback_different_classesc                    s   dd l }g  G  fdddt}|d|d}}||_||_t||j|_t||j|_ fdd}t||}~~~|  g  |  |  dg | | d   d d = |  |  g  d S )	Nr   c                       s    e Zd Zdd Z fddZdS )zAReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.Cc                 S   r   r	   )Z	attribute)r   valuer
   r
   r   r%     r   zJReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.__init__c                    s     | j d S r	   )r   rj   r   Zalistr
   r   r     r   zKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C.acallbackN)r   r   r   r%   r   r
   r
  r
   r   r     s    r   rA   ra   c                         d d S )NC went awayr   r   r
  r
   r   C_went_away     zKReferencesTestCase.test_callback_in_cycle_resurrection.<locals>.C_went_awayr  )	rH   rh   rj   rU   rB   r   rX   rb   rI   )r   rH   r   r   r   r  rX   r
   r
  r   #test_callback_in_cycle_resurrection  s$   
z6ReferencesTestCase.test_callback_in_cycle_resurrectionc                    s   dd l }g   fdd}G  fdddt}| | }}||_||_|j}t|||_t||j|_t||}| | | ~~~~|  g  |	  |  dg | | d   d d = |	  |  g  d S )Nr   c                    r  )Nsafe_callback calledr  r   r
  r
   r   safe_callback  r  zDReferencesTestCase.test_callbacks_on_callback.<locals>.safe_callbackc                       r   )z8ReferencesTestCase.test_callbacks_on_callback.<locals>.Cc                    r  )Nz	cb calledr  r   r
  r
   r   r    r  z;ReferencesTestCase.test_callbacks_on_callback.<locals>.C.cbNr  r
   r
  r
   r   r     r   r   r  )
rH   rh   r+   r  rU   rB   rX   r^   rb   rI   )r   rH   r  r   rj   drC   Zexternal_wrr
   r
  r   test_callbacks_on_callback  s(   	
z-ReferencesTestCase.test_callbacks_on_callbackc                 C   r   r	   )check_gc_during_creationrU   rB   r   r
   r
   r   test_gc_during_ref_creation  r   z.ReferencesTestCase.test_gc_during_ref_creationc                 C   r   r	   )r  rU   rp   r   r
   r
   r   test_gc_during_proxy_creation	  r   z0ReferencesTestCase.test_gc_during_proxy_creationc                 C   s   t  }t ddd t   G dd d}dd }| }| }||_|||_z| }t|| W t j|  d S t j|  w )NrA   c                   @   r   )z6ReferencesTestCase.check_gc_during_creation.<locals>.ANr   r
   r
   r
   r   r     r   r   c                  W   r   r	   r
   )argsr
   r
   r   rC     r   z=ReferencesTestCase.check_gc_during_creation.<locals>.callback)rH   get_thresholdset_thresholdrI   r   rX   rU   rB   )r   r   Z
thresholdsr   rC   Z
referencedr   r
   r
   r   r    s   
z+ReferencesTestCase.check_gc_during_creationc                 C   s   G dd dt }| }d S )Nc                   @   r   )z>ReferencesTestCase.test_ref_created_during_del.<locals>.Targetc                 S   s   t | ad S r	   )rU   rB   ref_from_delr   r
   r
   r   __del__+  s   zFReferencesTestCase.test_ref_created_during_del.<locals>.Target.__del__Nr   r   r   r  r
   r
   r
   r   Target*  r   r  )rh   )r   r  wr
   r
   r   test_ref_created_during_del%  s   
z.ReferencesTestCase.test_ref_created_during_delc              	   C   s.   t t}| t|jddddd t  d S r<   )rU   rB   r   rl   rm   r%   rH   rI   )r   rr
   r
   r   	test_init1  s   
zReferencesTestCase.test_initc                 C   sX   G dd dt }g }tt t||j}d }t  | | d  | ||g d S )Nc                   @   r   )z*ReferencesTestCase.test_classes.<locals>.ANr   r
   r
   r
   r   r   ;  r   r   )rh   rU   rB   intr   rH   rI   rb   )r   r   lr   r
   r
   r   test_classes9  s   
zReferencesTestCase.test_classesc           	      C   s\  t d}t d}t d}t|}t|}t|}t|}| ||k | ||k | ||k | ||k | ||k | ||k | ||k | ||k | |tk | |tk ~~~t  |||fD ]	}| | d  qr| ||k | ||k | ||k | ||k | 	||k||u  | 	||k||u d S )NrA   ra   )
r"   rU   rB   r   r   r   rH   rI   r^   rb   )	r   r   yzr   brj   r  r!  r
   r
   r   test_equalityE  s6   



z ReferencesTestCase.test_equalityc                 C   s|   t jt jt jt jg}td}td}t|}t|}|D ]
}| t	||| q~~t
  |D ]
}| t	||| q1d S r@   )r   ltgtleger"   rU   rB   rl   rm   rH   rI   )r   opsr   r&  r   r(  opr
   r
   r   test_orderingj  s   

z ReferencesTestCase.test_orderingc                 C   sj   t d}t d}t|}t|}| t|td ~~t  | t|td | tt| d S r   )	r"   rU   rB   rb   r0   rH   rI   rl   rm   )r   r   r&  r   r(  r
   r
   r   test_hashingy  s   

zReferencesTestCase.test_hashingc                 C   sN   G dd d}t  }|d  }}tdD ]
}|| ||< }q~t  d S )Nc                   @   r   )z1ReferencesTestCase.test_trashcan_16602.<locals>.Cc                    s0   |sd S t |   fdd}t ||| _d S )Nc                    s
     }d S r	   r
   )wparentrW   Zwselfr
   r   r    r   zFReferencesTestCase.test_trashcan_16602.<locals>.C.__init__.<locals>.cb)rU   rB   r2  )r   parentr  r
   r3  r   r%     s
   
z:ReferencesTestCase.test_trashcan_16602.<locals>.C.__init__Nr9   r
   r
   r
   r   r     r   r   d   )rU   WeakKeyDictionaryr   rH   rI   )r   r   r  rootrj   nr
   r
   r   test_trashcan_16602  s   	z&ReferencesTestCase.test_trashcan_16602c                 C   sD   t d}dd }t||}| |j| t|}| |j d S )NrA   c                 S   r   r	   r
   rg   r
   r
   r   r     r   z<ReferencesTestCase.test_callback_attribute.<locals>.<lambda>)r"   rU   rB   r^   __callback__r_   )r   r   rC   rd   re   r
   r
   r   test_callback_attribute  s   
z*ReferencesTestCase.test_callback_attributec                 C   s<   t d}t|| j}| |j ~t  | |j d S r@   )	r"   rU   rB   rC   ru   r:  r   r   r_   )r   r   rB   r
   r
   r   &test_callback_attribute_after_deletion  s   z9ReferencesTestCase.test_callback_attribute_after_deletionc                 C   sV   t d}dd }t||}| t dd |_W d    d S 1 s$w   Y  d S )NrA   c                 S   r   r	   r
   rg   r
   r
   r   r     r   z@ReferencesTestCase.test_set_callback_attribute.<locals>.<lambda>c                 S   r   r	   r
   rg   r
   r
   r   r     r   )r"   rU   rB   rl   AttributeErrorr:  )r   r   rC   rd   r
   r
   r   test_set_callback_attribute  s   "z.ReferencesTestCase.test_set_callback_attributec                 C   s6   G dd dt }|d}t|dd }~t  d S )Nc                   @   r   )z;ReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDelc                 S   r   r	   r
   r   r
   r
   r   r    r   zCReferencesTestCase.test_callback_gcs.<locals>.ObjectWithDel.__del__Nr  r
   r
   r
   r   ObjectWithDel  r   r?  rA   c                 S   s   t  S r	   )r   r   rg   r
   r
   r   r     r   z6ReferencesTestCase.test_callback_gcs.<locals>.<lambda>)r"   rU   rB   r   r   )r   r?  r   rd   r
   r
   r   test_callback_gcs  s
   z$ReferencesTestCase.test_callback_gcsN)9r   r   r   rY   r[   r   cpython_onlyr`   rf   rk   rn   rt   rT   rZ   ry   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)  r0  r1  r9  r;  r<  r>  r@  r
   r
   r
   r   rS   e   sl    
	
((.&%	rS   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )SubclassableWeakrefTestCasec                 C   sr   G dd dt j}td}||dd}| | | | |j | |jd ~t  | 	|  | |j d S )Nc                       s*   e Zd Zd fdd	Z fddZ  ZS )z=SubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRefNr   c                    s   || _ t || d S r	   )r	  superr%   )r   obrC   r	  	__class__r
   r   r%     s   zFSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__init__c                    s   d| _ t  S NT)calledrC  r   r   rE  r
   r   r        
zFSubclassableWeakrefTestCase.test_subclass_refs.<locals>.MyRef.__call__r   )r   r   r   r%   r   __classcell__r
   r
   rE  r   MyRef  s    rK  r      r	  )
rU   rB   r"   r^   r   rH  rb   r	  r   r_   )r   rK  rW   mrr
   r
   r   test_subclass_refs  s   z.SubclassableWeakrefTestCase.test_subclass_refsc                 C   s   G dd dt j}td}||}t |}| || | t |||g | t |d ||}| t |d t |}| t|d | ||d  | 	||dd   | 	||dd   d S )Nc                   @   r   )zXSubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refs.<locals>.MyRefNr   r
   r
   r
   r   rK    r   rK  r   ra   r~   r   rA   )
rU   rB   r"   assertIsNotrb   r   rx   r   r^   r   )r   rK  rW   r1r2Zr3refsr
   r
   r   -test_subclass_refs_dont_replace_standard_refs  s   

zISubclassableWeakrefTestCase.test_subclass_refs_dont_replace_standard_refsc                 C   s`   G dd dt j}td}||t}||t}| || t |}| || | || d S )Nc                   @   r   )zUSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbacks.<locals>.MyRefNr   r
   r
   r
   r   rK    r   rK  r   )rU   rB   r"   idstrrP  r   r   )r   rK  rW   rQ  rR  rS  r
   r
   r   *test_subclass_refs_dont_conflate_callbacks  s   


zFSubclassableWeakrefTestCase.test_subclass_refs_dont_conflate_callbacksc                 C   sh   G dd dt j}td}||d dd}| |jd | |jd | | d | t|d d S )Nc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	zHSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRefslot1slot2c                 S   s   t j| ||S r	   )rU   rB   __new__)r   rD  rC   rY  rZ  r
   r
   r   r[    r   zPSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__new__c                 S   s   || _ || _d S r	   rX  )r   rD  rC   rY  rZ  r
   r
   r   r%     rI  zQSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.__init__c                 S   s   | j | j S r	   rX  r   r
   r
   r   meth  ri   zMSubclassableWeakrefTestCase.test_subclass_refs_with_slots.<locals>.MyRef.methN)r   r   r   	__slots__r[  r%   r\  r
   r
   r
   r   rK    s
    rK  r   abcdefZabcdef__dict__)	rU   rB   r"   rb   rY  rZ  r\  r   r   )r   rK  rW   r!  r
   r
   r   test_subclass_refs_with_slots  s   	z9SubclassableWeakrefTestCase.test_subclass_refs_with_slotsc                    s   G dd dt j} fdd}t }|||}||_~~  jd t }|||}|||}||_||_~~~  jd dS )z3Confirm https://bugs.python.org/issue3100 is fixed.c                   @   r   )zHSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.MyRefNr   r
   r
   r
   r   rK    r   rK  c                    s     j d7  _ d S r@   r=   )r  r   r
   r   rC     rD   zKSubclassableWeakrefTestCase.test_subclass_refs_with_cycle.<locals>.callbackr   N)rU   rB   r   rW   rb   r>   r!  )r   rK  rC   rW   rQ  rR  r
   r   r   test_subclass_refs_with_cycle  s"   


z9SubclassableWeakrefTestCase.test_subclass_refs_with_cycleN)r   r   r   rO  rT  rW  ra  rb  r
   r
   r
   r   rB    s    rB  c                   @   sZ   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
dd Zdd Zdd ZdS )WeakMethodTestCasec                 C   s   G dd dt }|S )z3Return an Object subclass overriding `some_method`.c                   @   r   )z'WeakMethodTestCase._subclass.<locals>.Cc                 S   r2   )Nr   r
   r   r
   r
   r   r4   +  r   z3WeakMethodTestCase._subclass.<locals>.C.some_methodN)r   r   r   r4   r
   r
   r
   r   r   *  r   r   )r"   )r   r   r
   r
   r   	_subclass(  s   zWeakMethodTestCase._subclassc                 C   sn   t d}t|j}| |tj | | t|j | | j| | | j	|jj	 | 
|  d d S )NrA   r3   )r"   rU   
WeakMethodr4   ZassertIsInstanceReferenceTyper   r^   __self____func__rb   r   rW   r!  r
   r
   r   
test_alive/  s   zWeakMethodTestCase.test_alivec                 C   s0   t d}t|j}~t  | | d  d S r@   )r"   rU   re  r4   rH   rI   r^   ri  r
   r
   r   test_object_dead8  s
   z#WeakMethodTestCase.test_object_deadc                 C   s:   |   }|d}t|j}|`t  | | d  d S r@   )rd  rU   re  r4   rH   rI   r^   )r   r   rW   r!  r
   r
   r   test_method_dead?  s   z#WeakMethodTestCase.test_method_deadc                    sh   |   }g   fdd}|d}t|j|}~t  |  |g tj|_t  |  |g d S )Nc                         |  d S r	   r  r#   Zcallsr
   r   r  K  r  z=WeakMethodTestCase.test_callback_when_object_dead.<locals>.cbrA   )rd  rU   re  r4   rH   rI   rb   r"   r   r   r  rW   r!  r
   rn  r   test_callback_when_object_deadG  s   z1WeakMethodTestCase.test_callback_when_object_deadc                    sd   |   }g   fdd}|d}t|j|}|`t  |  |g ~t  |  |g d S )Nc                    rm  r	   r  r#   rn  r
   r   r  [  r  z=WeakMethodTestCase.test_callback_when_method_dead.<locals>.cbrA   )rd  rU   re  r4   rH   rI   rb   ro  r
   rn  r   test_callback_when_method_deadW  s   z1WeakMethodTestCase.test_callback_when_method_deadc                 C   s<   t d}dd }t|j|}t|}~| | d  d S )NrA   c                 S   r   r	   r
   )_r
   r
   r   r  k  r   z-WeakMethodTestCase.test_no_cycles.<locals>.cb)r"   rU   re  r4   rB   r^   )r   rW   r  r!  rX   r
   r
   r   test_no_cyclesg  s   
z!WeakMethodTestCase.test_no_cyclesc                    sP   fdd} fdd}t d}t d}t|j}t|j}t|j}t|j}||| ||| ||| ||| ||| ||| t d}	t|	j}
t|	j}|||
 ||| |||
 ||| |||j ||t ~~~	t  |||||
|f}|D ]}|D ]} ||k||u   ||k||u qqd S )Nc                    s      | |k  | |k d S r	   r   r   r   r(  r   r
   r   _eqs     z-WeakMethodTestCase.test_equality.<locals>._eqc                    s      | |k  | |k d S r	   rt  ru  r   r
   r   _nev  rw  z-WeakMethodTestCase.test_equality.<locals>._nerA   ra   )	r"   rU   re  r4   r6   r   rH   rI   rb   )r   rv  rx  r   r&  r   r(  rj   r  r'  er   rS  qr!  r
   r   r   r)  r  s@   










z WeakMethodTestCase.test_equalityc                 C   s   t d}t d}t|j}t|j}t|j}| t|t| t|}~~t  | t|| | t|| | 	t
t| d S r@   )r"   rU   re  r4   r6   rb   r0   rH   rI   rl   rm   )r   r   r&  r   r(  rj   Zhar
   r
   r   r1    s   zWeakMethodTestCase.test_hashingN)r   r   r   rd  rj  rk  rl  rp  rq  r   rA  rs  r)  r1  r
   r
   r
   r   rc  &  s    	

)rc  c                   @   s  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d Zdd Zdd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dJdK Z(dLdM Z)dNdO Z*dPdQ Z+dRdS Z,dTdU Z-dVdW Z.dXdY Z/dZd[ Z0d\d] Z1d^d_ Z2d`da Z3e4j5dbdc Z6ddS )eMappingTestCaser   c           	         s   d}dd t |D }| fdd|D }| }zt| W n	 ty)   Y nw ~t  t|}~t  t|}| |d | |d d S )N   c                 S      g | ]}t  qS r
   r7   .0r   r
   r
   r   
<listcomp>      z4MappingTestCase.check_len_cycles.<locals>.<listcomp>c                 3       | ]} |V  qd S r	   r
   r  rW   consr
   r   	<genexpr>      z3MappingTestCase.check_len_cycles.<locals>.<genexpr>)r   rA   r   )	r   itemsnextStopIterationrH   rI   r   r   rb   )	r   	dict_typer  Nr  dctr   n1n2r
   r  r   check_len_cycles  s"   z MappingTestCase.check_len_cyclesc                 C      |  tjdd  d S )Nc                 S      | dfS r@   r
   r   r
   r
   r   r     r   z<MappingTestCase.test_weak_keyed_len_cycles.<locals>.<lambda>)r  rU   r6  r   r
   r
   r   test_weak_keyed_len_cycles     z*MappingTestCase.test_weak_keyed_len_cyclesc                 C   r  )Nc                 S      d| fS r@   r
   r   r
   r
   r   r     r   z=MappingTestCase.test_weak_valued_len_cycles.<locals>.<lambda>)r  rU   WeakValueDictionaryr   r
   r
   r   test_weak_valued_len_cycles  r  z+MappingTestCase.test_weak_valued_len_cyclesc           
   	      s   | j tjgt R   tddD ]Z}d}td t||| dd t|D }| fdd|D }~| }zt| W n	 tyI   Y nw t	|}~t	|}	| 
|d | || | 
|	d | |	| qd S )	NrA   r5  r|  r   c                 S   r}  r
   r~  r  r
   r
   r   r    r  z2MappingTestCase.check_len_race.<locals>.<listcomp>c                 3   r  r	   r
   r  r  r
   r   r    r  z1MappingTestCase.check_len_race.<locals>.<genexpr>)Z
addCleanuprH   r  r  r   rI   r  r  r  r   ZassertGreaterEqualZassertLessEqual)
r   r  r  thr  r  r  r   r  r  r
   r  r   check_len_race  s,   
zMappingTestCase.check_len_racec                 C   r  )Nc                 S   r  r@   r
   r   r
   r
   r   r     r   z:MappingTestCase.test_weak_keyed_len_race.<locals>.<lambda>)r  rU   r6  r   r
   r
   r   test_weak_keyed_len_race  r  z(MappingTestCase.test_weak_keyed_len_racec                 C   r  )Nc                 S   r  r@   r
   r   r
   r
   r   r     r   z;MappingTestCase.test_weak_valued_len_race.<locals>.<lambda>)r  rU   r  r   r
   r
   r   test_weak_valued_len_race  r  z)MappingTestCase.test_weak_valued_len_racec                 C   s  |   \}}|D ]}| t|d | |||j d qt| }t|  }|	  |	  | ||d ~~| t
|| j |d= t  | t
|| jd d ~~t  | t
|dd t }| t|jd t |d< t  | t|jd d S )NrA   #wrong object returned by weak dict!z/cloning of weak-valued dictionary did not work!r   /deleting object did not cause dictionary updatez0deleting the values did not clear the dictionaryra   )make_weak_valued_dictrb   rU   rx   r^   r$   r   r  copysortr   COUNTr   r  rl   KeyError__getitem__r   r   dictobjectsrW   Zitems1Zitems2r
   r
   r   test_weak_values  s<   
z MappingTestCase.test_weak_valuesc                 C   s   |   \}}|D ]}| t|dd|  | |j|| d q| }|  }| t|t|d ~~| t	|| j
 |d= t  | t	|| j
d d ~~t  | t	|dd td}d	||< | || | d
| d S )NrA   z&wrong number of weak references to %r!r  z.cloning of weak-keyed dictionary did not work!r   r  z.deleting the keys did not clear the dictionaryr   z$What is the meaning of the universe?"   )make_weak_keyed_dictrb   rU   rx   r^   r$   r  r  setr   r  r   r"   r   assertNotInr  r
   r
   r   test_weak_keys  s:   zMappingTestCase.test_weak_keysc                 C   s  |   \}}| | | }| t|t| t|}|D ]}| }| || | || | |j||  || q| t|d t|}| tt| t| | D ]}| }| || | || | |j||  || q]| t|d d S r<   )	r  check_iterskeyrefsrb   r   r   r   r$   r   r   r  r  rS  Zobjects2rX   rD  r
   r
   r   test_weak_keyed_iters)  s*   
z%MappingTestCase.test_weak_keyed_itersc                 C   s
  |   \}}| | | }| t|t| t|}|D ]}| }| |||j  | |j||j j || q| t|d t|}| tt| t| | D ]}| }| |||j  | |j||j j || q\| t|d d S r<   )	r  r  	valuerefsrb   r   r   r$   r   itervaluerefsr  r
   r
   r   test_weak_valued_itersD  s&   
z&MappingTestCase.test_weak_valued_itersc                 C   s   t | }| D ]}|| q
| |d t | }|D ]}|| q | |d t | }| D ]}|| q8| |d t | }| D ]}|| qP| |d d S )Nzitems() did not touch all itemsz!__iter__() did not touch all keysz!iterkeys() did not touch all keysz%itervalues() did not touch all values)r   r  r   r   keysvalues)r   r  r  itemr  r   r  vr
   r
   r   r  ]  s$   zMappingTestCase.check_itersc                 C   sl   t |}tt|| }t| |d= t  | t t|t |t |d g ~| t ||d  d S )NrA   )	r   r   getattrr  rH   rI   r   r   rb   )r   r  r  Z	iter_namer8  r   r
   r
   r   "check_weak_destroy_while_iteratingw  s   $z2MappingTestCase.check_weak_destroy_while_iteratingc                 C   s  | \}}|  || W d    n1 sw   Y  | \}}| t|j| W d    n1 s3w   Y  |  || | \}}| t|j| W d    n1 sVw   Y  |  || | \}}|||< W d    n1 suw   Y  | || | t|}| \}}|| W d    n1 sw   Y  | || | \}}|  W d    n1 sw   Y  | t	|d d S r<   )
r  rl   r  r   poprb   r  updateclearr   )r   r  testcontextr   r  Zddictr
   r
   r   -check_weak_destroy_and_mutate_while_iterating  s0   


z=MappingTestCase.check_weak_destroy_and_mutate_while_iteratingc                 C   s  t d}| + t|}|t|  | t||d  |||< | t|| W d    n1 s5w   Y  |   | t||d  |  | t||d  W d    n1 s`w   Y  | # | t||d  |t| = | t||d  W d    n1 sw   Y  |   | t||d  |  | t||d  W d    n1 sw   Y  |  |  | t|d W d    n1 sw   Y  | t|d d S )	Ni@ rA   ra   r~   r3   r5   r   r   )r"   r   r  r  r  rb   popitemr  )r   r  r  rW   r8  r
   r
   r   &check_weak_del_and_len_while_iterating  s8   z6MappingTestCase.check_weak_del_and_len_while_iteratingc                    s   |   \ |  d |  d |  d |  d |   \ tj fdd}|  | |   \ |  | d S )Nr  r  r  r  c                  3   sX    z#t   } t|   j}t  t||fV  W d } t  d S d } t  w r	   r   r  r  r  r$   rH   rI   r"   )r   r  r  r  r
   r   r       

zKMappingTestCase.test_weak_keys_destroy_while_iterating.<locals>.testcontext)r  r  
contextlibcontextmanagerr  r  r   r  r
   r  r   &test_weak_keys_destroy_while_iterating  s   z6MappingTestCase.test_weak_keys_destroy_while_iteratingc                    s   |   \ |  d |  d |  d |  d |  d |   \ tj fdd}|  | |   \ |  | d S )Nr  r  r  r  r  c                  3   sX    z#t   } t|   j}t  |t|fV  W d } t  d S d } t  w r	   r  )r   r   r  r
   r   r    r  zMMappingTestCase.test_weak_values_destroy_while_iterating.<locals>.testcontext)r  r  r  r  r  r  r  r
   r  r   (test_weak_values_destroy_while_iterating  s   z8MappingTestCase.test_weak_values_destroy_while_iteratingc                 C   s*   t d}t|di}| || d d S Nr~   il  r"   rU   r6  rb   r   rW   r  r
   r
   r   #test_make_weak_keyed_dict_from_dict     z3MappingTestCase.test_make_weak_keyed_dict_from_dictc                 C   s4   t d}t|di}t|}| || d d S r  r  r   rW   r  Zdict2r
   r
   r   .test_make_weak_keyed_dict_from_weak_keyed_dict     
z>MappingTestCase.test_make_weak_keyed_dict_from_weak_keyed_dictc                 C   s8   t  }tttt| j}|D ]}|j||< q||fS r	   )rU   r6  r   mapr"   r   r  r$   r   r  r  rW   r
   r
   r   r    
   z$MappingTestCase.make_weak_keyed_dictc                 C   s*   t d}td|i}| |d | d S r  r"   rU   r  rb   r  r
   r
   r   $test_make_weak_valued_dict_from_dict  r  z4MappingTestCase.test_make_weak_valued_dict_from_dictc                 C   s4   t d}td|i}t|}| |d | d S r  r  r  r
   r
   r   0test_make_weak_valued_dict_from_weak_valued_dict  r  z@MappingTestCase.test_make_weak_valued_dict_from_weak_valued_dictc                 C   s   |  ttjj |  ttji i  |  ttjdd td}dD ]}tjdi ||i}| t| |g | || | q d S )Nr
   r~   r   r  r+   iterable)	rl   rm   rU   r  r%   r"   rb   r   r  )r   rW   kwr  r
   r
   r   test_make_weak_valued_dict_misc  s   z/MappingTestCase.test_make_weak_valued_dict_miscc                 C   s8   t  }tttt| j}|D ]}|||j< q||fS r	   )rU   r  r   r  r"   r   r  r$   r  r
   r
   r   r    r  z%MappingTestCase.make_weak_valued_dictc           	      C   s   | }|||< |||< |  t|d | \}}|  t|d ||u r,| || n| || | \}}|  t|d ||u rL| || d S | || d S )Nra   rA   r   )rb   r   r  r^   )	r   klasskey1value1key2value2weakdictr   r  r
   r
   r   check_popitem!  s   zMappingTestCase.check_popitemc                 C   s   |  tjdt dt  d S )Nr  r  )r  rU   r  r   r   r
   r
   r   test_weak_valued_dict_popitem3     z-MappingTestCase.test_weak_valued_dict_popitemc                 C   s   |  tjt dt d d S Nzvalue 1zvalue 2)r  rU   r6  r   r   r
   r
   r   test_weak_keyed_dict_popitem7  r  z,MappingTestCase.test_weak_keyed_dict_popitemc                 C   s   |  ||d | }|||}| || | || | ||| | || | |||}| || | || | ||| | || | d S )Nz9invalid test -- value parameters must be distinct objects)rP  
setdefaultr^   r   get)r   r  keyr  r  r  rW   r
   r
   r   check_setdefault;  s   z MappingTestCase.check_setdefaultc                 C   s   |  tjdt t  d S )Nr  )r  rU   r  r   r   r
   r
   r    test_weak_valued_dict_setdefaultL  s   
z0MappingTestCase.test_weak_valued_dict_setdefaultc                 C   s   |  tjt dd d S r  )r  rU   r6  r   r   r
   r
   r   test_weak_keyed_dict_setdefaultP  s   z/MappingTestCase.test_weak_keyed_dict_setdefaultc                 C   s   | }| | | t|t| | D ]}| ||d ||}| |||  | ||| q| D ]}| ||d || }| |||  | ||| q:d S )Nz(mysterious new key appeared in weak dictz%original key disappeared in weak dict)r  rb   r   r  r   r  r^   )r   r  r  r  r   r  r
   r
   r   check_updateT  s   

zMappingTestCase.check_updatec              	   C   s   |  tjdt dt t t i | ttjj t }| t|ji i  | t|jdd | t|	 g  t
d}dD ]#}t }|jdi ||i | t|	 |g | || | q?d S )NrA   r   r
   r~   r  )r  rU   r  r   rl   rm   r  rb   r   r  r"   )r   r  rW   r  r
   r
   r   test_weak_valued_dict_updateg  s   z,MappingTestCase.test_weak_valued_dict_updatec                 C   s  t  }t  }t  }td|i}t||d}| }||d}d|fd|fg}||B }	| t|	t|t|B  | t|	tj ||O }| ||	 ||B }
| t|
t||B  | t|
tj ||O }| ||
 | }||O }| t|t|t|B  | t|tj ||B }| t||t|B  | t|tj ~| d|	 | d|
 | d| | d| d S )NrA   rA   ra   )rA   r~   r5   r   ra   )	r   rU   r  r  rb   r  r^   r   r  )r   r   r(  rj   Zwvd1Zwvd2Zwvd3d1pairstmp1tmp2tmp3tmp4r
   r
   r    test_weak_valued_union_operatorsx  s<   
z0MappingTestCase.test_weak_valued_union_operatorsc              	   C   s$   |  tjt dt dt di d S )NrA   ra   r~   )r  rU   r6  r   r   r
   r
   r   test_weak_keyed_dict_update  s   z+MappingTestCase.test_weak_keyed_dict_updatec                 C   sh   t  }td}td}d||< d||< | t|d ||= | t|d | t| |g d S )N12	somethingra   rA   )rU   r6  r"   rb   r   r   r  r   r  o1rw   r
   r
   r   test_weak_keyed_delitem  s   z'MappingTestCase.test_weak_keyed_delitemc                 C   s  t  }t  }t  }t|d|di}t|d|di}| }|d|di}|df|dfg}||B }	| t|	t|t|B  | t|	tj ||O }| ||	 ||B }
| t|
t||B  | t|
tj ||O }| ||
 | }||O }| t|t|t|B  | t|tj ||B }| t||t|B  | t|tj ~| d|		  | d|
	  | d|	  | d|	  d S )	NrA   ra   r~   r3   56      )
r   rU   r6  r  rb   r  r^   r   r  r  )r   r  rw   Zo3Zwkd1Zwkd2Zwkd3r  r  r  r  r  r  r
   r
   r   test_weak_keyed_union_operators  s<   z/MappingTestCase.test_weak_keyed_union_operatorsc                 C   sl   t  }td}td}||d< ||d< | t|d |d= | t|d | t| d|fg d S )Nr  r  r  zsomething elsera   rA   )rU   r  r"   rb   r   r   r  r  r
   r
   r   test_weak_valued_delitem  s   z(MappingTestCase.test_weak_valued_delitemc                 C   sf   t  }td}| t|j| | t|j| | t|jd | t|jd | t|jdd d S )Nr     )	rU   r6  r"   rl   r  r   r  rm   __setitem__)r   r  rW   r
   r
   r   test_weak_keyed_bad_delitem  s   z+MappingTestCase.test_weak_keyed_bad_delitemc                    s   t  }dG fdddt  fddtdD D ]}|j||< q~t|   dd}D ]	}|d	7 }||= q7t  | 	t
|d | 	|d
 d S )NFc                       s*   e Zd Zdd Zdd Z fddZdS )z<MappingTestCase.test_weak_keyed_cascading_deletes.<locals>.Cc                 S   r   r	   rM  )r   r   r
   r
   r   r%     r   zEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__init__c                 S   r/   r	   )r0   r	  r   r
   r
   r   r1     r   zEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__hash__c                    s    rd= | j |j kS )Nr  rM  r*   mutateobjsr
   r   r,     s   zCMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.C.__eq__N)r   r   r   r%   r1   r,   r
   r  r
   r   r     s    r   c                    s   g | ]} |qS r
   r
   r  )r   r
   r   r    s    zEMappingTestCase.test_weak_keyed_cascading_deletes.<locals>.<listcomp>r3   Tr   rA   ra   )rU   r6  rh   r   r	  r   r  reverser   rb   r   )r   r  rW   countr
   )r   r	  r
  r   !test_weak_keyed_cascading_deletes  s"   	z1MappingTestCase.test_weak_keyed_cascading_deletesc                 C      t  }| t|d d S )Nz<WeakValueDictionary at 0x.*>)rU   r  assertRegexrV   r   r  r
   r
   r   test_make_weak_valued_dict_repr     z/MappingTestCase.test_make_weak_valued_dict_reprc                 C   r  )Nz<WeakKeyDictionary at 0x.*>)rU   r6  r  rV   r  r
   r
   r   test_make_weak_keyed_dict_repr  r  z.MappingTestCase.test_make_weak_keyed_dict_reprc                 C   s^   t  }t  tdD ]}|dt }| |d  ~qW d    d S 1 s(w   Y  d S Ni r   )rU   r  rR   r   r  r7   rP  r   r  r   r   r
   r
   r   $test_threaded_weak_valued_setdefault   s   "z4MappingTestCase.test_threaded_weak_valued_setdefaultc                 C   sd   t  }t ! tdD ]}t |d< |dd}| |d  qW d    d S 1 s+w   Y  d S r  )rU   r  rR   r   r7   r  rP  r  r
   r
   r   test_threaded_weak_valued_pop(  s   
"z-MappingTestCase.test_threaded_weak_valued_popc                 C   sd   t  }t ! tdD ]}t }||d< | t|d d }qW d    d S 1 s+w   Y  d S )Ni@ r   rA   )rU   r  rR   r   r7   rb   r   )r   r  r   rW   r
   r
   r   %test_threaded_weak_valued_consistency0  s   "z5MappingTestCase.test_threaded_weak_valued_consistencyc                    s  g }G dd d}G dd d} fdd}dd }|  |tjtjf | }g }	g }
td	D ]}||||}}|	| |
| |||< ~~q/tj|||fd
}|tju rbtj||	fd
}ntj||
fd
}|  |  |	  |	  |r|d d S )Nc                   @   r   )z?MappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyKeyc                 S   r   r	   ctrr   r  r
   r
   r   r%   B  r   zHMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyKey.__init__Nr9   r
   r
   r
   r   DummyKeyA  r   r  c                   @   r   )zAMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyValuec                 S   r   r	   r  r  r
   r
   r   r%   F  r   zJMappingTestCase.check_threaded_weak_dict_copy.<locals>.DummyValue.__init__Nr9   r
   r
   r
   r   
DummyValueE  r   r  c              
      sX   z du rt | }W d S |   }W d S  ty+ } z|| W Y d }~d S d }~ww rG  )r  deepcopyr   r   )r  excrr  exr  r
   r   	dict_copyI  s   z@MappingTestCase.check_threaded_weak_dict_copy.<locals>.dict_copyc                 S   sN   d}| r%t dt| d }|d7 }| | |d dkr!t  | sd S d S )Nr   rA   i'  )randomrandintr   r  rH   rI   )ZlstZgc_ctrr   r
   r
   r   pop_and_collectR  s   
zFMappingTestCase.check_threaded_weak_dict_copy.<locals>.pop_and_collectip )rL   r  r   )
r   rU   r6  r  r   r   rM   rN   rO   rP   )r   Ztype_r  r  r  r  r"  r%  r  r  r  r   r   r  Zt_copyZ	t_collectr
   r!  r   check_threaded_weak_dict_copy<  s6   		


z-MappingTestCase.check_threaded_weak_dict_copyc                 C      |  tjd d S NFr&  rU   r6  r   r
   r
   r    test_threaded_weak_key_dict_copyy     z0MappingTestCase.test_threaded_weak_key_dict_copyc                 C   r'  rG  r)  r   r
   r
   r   $test_threaded_weak_key_dict_deepcopy~  r+  z4MappingTestCase.test_threaded_weak_key_dict_deepcopyc                 C   r'  r(  r&  rU   r  r   r
   r
   r   "test_threaded_weak_value_dict_copy  r+  z2MappingTestCase.test_threaded_weak_value_dict_copyc                 C   r'  rG  r-  r   r
   r
   r   &test_threaded_weak_value_dict_deepcopy  r+  z6MappingTestCase.test_threaded_weak_value_dict_deepcopyc                 C   s   t  }| |jj d S r	   )rU   r  r_   _remove__closure__)r   r  r
   r
   r   test_remove_closure  s   z#MappingTestCase.test_remove_closureN)7r   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  r  r&  r*  r,  r.  r/  r   rA  r2  r
   r
   r
   r   r{    sh     !%%.=r{  )mapping_testsc                   @   s6   e Zd ZdZedededdZejZdd Z	dS )	WeakValueDictionaryTestCasez?Check that WeakValueDictionary conforms to the mapping protocolrA   ra   r~   )r  r  key3c                 C   
   | j  S r	   )!_WeakValueDictionaryTestCase__refr  r   r
   r
   r   
_reference  r   z&WeakValueDictionaryTestCase._referenceN)
r   r   r   __doc__r"   r7  rU   r  	type2testr8  r
   r
   r
   r   r4    s
    r4  c                   @   s:   e Zd ZdZeddeddeddiZejZdd	 Z	d
S )WeakKeyDictionaryTestCasez=Check that WeakKeyDictionary conforms to the mapping protocolr  rA   r  ra   r5  r~   c                 C   r6  r	   )_WeakKeyDictionaryTestCase__refr  r   r
   r
   r   r8    r   z$WeakKeyDictionaryTestCase._referenceN)
r   r   r   r9  r"   r<  rU   r6  r:  r8  r
   r
   r
   r   r;    s
    r;  c                   @   sV   e Zd ZG dd dZdd Zdd Zdd Zd	d
 Zdd Ze	dd Z
dd ZdS )FinalizeTestCasec                   @   r   )zFinalizeTestCase.ANr   r
   r
   r
   r   r     r   r   c                 C   s   t jjdkrt  d S d S )NZcpython)sysimplementationnamer   r   r   r
   r
   r   _collect_if_necessary  s   z&FinalizeTestCase._collect_if_necessaryc                    s   fdd}|   }g  tj||dddd}| |jd | | ||dd	dif | | d
 | | d  | | d  | | d  | | d  | |jd |  d
g g  t||ddd}| | ||di f | | ||di f | | d  | | d  | | d  | | d  | |jd |  g  g  tj||dddd}~|   | | d  | | d  | | d  | | d  | |jd |  d
g d S )Nc                    s     | | |  | | | S r	   r  r   r&  r'  resr
   r   add  s   z+FinalizeTestCase.test_finalize.<locals>.addC   +   Y   )r'  T)rF  rG  r'     F)rF  rG  rH  rB  )r   rU   finalizerb   alivepeekdetachrA  )r   rE  r   r   r
   rC  r   test_finalize  sB   zFinalizeTestCase.test_finalizec              	      s    fdd}|   }g  tj||ddddd}| | ||ddddf |  |  ddddfg | t tj||dd	 W d    n1 sMw   Y  | t tj||dd
 W d    n1 sjw   Y  | ttj| | ttj d S )Nc                     s     | |f d S r	   r  )r  kwargsrC  r
   r   fin  rD   z-FinalizeTestCase.test_arg_errors.<locals>.finrA   ra   r~   r3   )funcr   r  )rQ  r$   )r   rQ  r$   )r   rU   rJ  rb   rL  rl   rm   )r   rP  r   r   r
   rC  r   test_arg_errors  s   z FinalizeTestCase.test_arg_errorsc           	      C   s  |   }g }t||jd}t||jd}t||jd}t||jd}t||jd}~~| |j | |j | |j | |  | |j |  |d |  | |j |d |  |d ~|   | |j |d	 |  g d
}| 	|| d S )Nf1f2f3f4f5r   Br   r  )r   rU  rX  r   rV  rT  rS  r  )
r   rU   rJ  r   r   rK  rM  r   rA  rb   )	r   r   rD  rS  rT  rU  rV  rW  Zexpectedr
   r
   r   
test_order  s6   



zFinalizeTestCase.test_orderc                    s   G dd dt j}|  }g   fdd}|||}t |}t |}~~| |  | |  ~|   | |  | |  |  dg d S )Nc                   @   r   )z4FinalizeTestCase.test_all_freed.<locals>.MyFinalizerNr   r
   r
   r
   r   MyFinalizer  r   rZ  c                      r  )N{   r  r
   rC  r
   r   rC     r  z1FinalizeTestCase.test_all_freed.<locals>.callbackr[  )rU   rJ  r   rB   ru   rA  r_   rb   )r   rZ  r   rC   r   Zwr_callbackZwr_fr
   rC  r   test_all_freed  s   


zFinalizeTestCase.test_all_freedc                    s|    fdd}t  tdt}t  tdt}t  |}t  tdt}|jdks+J d|_|jdks5J |jdks<J d S )Nc                     s"   t  td} td dd  d S )Ng1f3 errorrA   r   )rU   rJ  print)r]  clsr
   r   error,  s   z,FinalizeTestCase.run_in_child.<locals>.errorrS  rT  rV  TF)rU   rJ  r_  _global_varatexit)ra  rb  rS  rT  rU  rV  r
   r`  r   run_in_child*  s   zFinalizeTestCase.run_in_childc                 C   sF   d}t d|\}}}|d }| |g d | d|v  d S )NzNfrom test.test_weakref import FinalizeTestCase;FinalizeTestCase.run_in_child()z-cascii)z	f4 foobarr^  r]  z	f1 foobars   ZeroDivisionError)r   Zassert_python_okdecode
splitlinesrb   r   )r   progrcouterrr
   r
   r   test_atexit>  s
   zFinalizeTestCase.test_atexitN)r   r   r   r   rA  rN  rR  rY  r\  classmethodre  rm  r
   r
   r
   r   r=    s    )'
r=  c                   @   r   )ModuleTestCasec                 C   sJ   dD ] }t t|}|dkr| |jd | |j| | |j| qd S )N)rf  	ProxyTyper   re  WeakSetr6  r  rq  rU   )r  rU   rb   r   r   r   )r   r@  r   r
   r
   r   
test_namesH  s   
zModuleTestCase.test_namesN)r   r   r   rr  r
   r
   r
   r   ro  G  r   ro  a   Doctest for examples in the library reference: weakref.rst

>>> from test.support import gc_collect
>>> import weakref
>>> class Dict(dict):
...     pass
...
>>> obj = Dict(red=1, green=2, blue=3)   # this object is weak referencable
>>> r = weakref.ref(obj)
>>> print(r() is obj)
True

>>> import weakref
>>> class Object:
...     pass
...
>>> o = Object()
>>> r = weakref.ref(o)
>>> o2 = r()
>>> o is o2
True
>>> del o, o2
>>> gc_collect()  # For PyPy or other GCs.
>>> print(r())
None

>>> import weakref
>>> class ExtendedRef(weakref.ref):
...     def __init__(self, ob, callback=None, **annotations):
...         super().__init__(ob, callback)
...         self.__counter = 0
...         for k, v in annotations.items():
...             setattr(self, k, v)
...     def __call__(self):
...         '''Return a pair containing the referent and the number of
...         times the reference has been called.
...         '''
...         ob = super().__call__()
...         if ob is not None:
...             self.__counter += 1
...             ob = (ob, self.__counter)
...         return ob
...
>>> class A:   # not in docs from here, just testing the ExtendedRef
...     pass
...
>>> a = A()
>>> r = ExtendedRef(a, foo=1, bar="baz")
>>> r.foo
1
>>> r.bar
'baz'
>>> r()[1]
1
>>> r()[1]
2
>>> r()[0] is a
True


>>> import weakref
>>> _id2obj_dict = weakref.WeakValueDictionary()
>>> def remember(obj):
...     oid = id(obj)
...     _id2obj_dict[oid] = obj
...     return oid
...
>>> def id2obj(oid):
...     return _id2obj_dict[oid]
...
>>> a = A()             # from here, just testing
>>> a_id = remember(a)
>>> id2obj(a_id) is a
True
>>> del a
>>> gc_collect()  # For PyPy or other GCs.
>>> try:
...     id2obj(a_id)
... except KeyError:
...     print('OK')
... else:
...     print('WeakValueDictionary error')
OK


libreftestc                	   C   s*   t ttttttt t 	t
jt  d S r	   )r   Zrun_unittestrS   rc  r{  r4  r;  rB  r=  Zrun_doctestr>  modulesr   r
   r
   r
   r   	test_main  s   	ru  __main__)rE   )+rH   r>  Zunittestr   rU   r   r  r  rM   rF   r#  testr   Ztest.supportr   r   r   r  rc  r   r   r   r    r"   r7   ZTestCaser;   r  rR   rS   rB  rc  r{  r3  ZBasicTestMappingProtocolr4  r;  r=  ro  rs  Z__test__ru  r   r
   r
   r
   r   <module>   sj    	      _h 
     i $V
