a
    äzeÓK  ã                   @   s@  d dl mZmZmZmZ d dlZd dlZd dlZd dlZd dl	Z	d dl
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 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ zd dlZdZW n ey   dZY n0 G dd„ deejƒZ G dd„ deejƒZ!G dd„ deejƒZ"G dd„ deeeejƒZ#G dd„ de$ƒZ%G dd„ dee%ejƒZ&G dd„ dee%ejƒZ'G dd„ deejƒZ(G d d!„ d!eejƒZ)G d"d#„ d#eejƒZ*G d$d%„ d%eejƒZ+erØG d&d'„ d'eejƒZ,G d(d)„ d)e!ƒZ-G d*d+„ d+e"ƒZ.G d,d-„ d-e&ƒZ/G d.d/„ d/e'ƒZ0G d0d1„ d1e"ƒZ1G d2d3„ d3e"ƒZ2G d4d5„ d5eejƒZ3G d6d7„ d7eejƒZ4G d8d9„ d9eejƒZ5G d:d;„ d;eejƒZ6ej7G d<d=„ d=ejƒƒZ8h d>£Z9h d?£Z:d@dA„ Z;dBdC„ Z<dDdE„ Z=dFdG„ Z>dHdI„ Z?G dJdK„ dKejƒZ@dLdM„ ZAeBdNkr<e C¡  dS )Oé    )ÚIMPORT_MAPPINGÚREVERSE_IMPORT_MAPPINGÚNAME_MAPPINGÚREVERSE_NAME_MAPPINGN)Úsupport)ÚAbstractHookTests)ÚAbstractUnpickleTests)ÚAbstractPickleTests)ÚAbstractPickleModuleTests)ÚAbstractPersistentPicklerTests)Ú&AbstractIdentityPersistentPicklerTests)Ú#AbstractPicklerUnpicklerObjectTests)ÚAbstractDispatchTableTests)ÚAbstractCustomPicklerClass)ÚBigmemPickleTestsTFc                   @   s@   e Zd ZeejƒZeejƒZeej	ƒZ
eejƒZejZejZdS )ÚPyPickleTestsN)Ú__name__Ú
__module__Ú__qualname__ÚstaticmethodÚpickleÚ_dumpÚdumpÚ_dumpsÚdumpsÚ_loadÚloadÚ_loadsÚloadsÚ_PicklerÚPicklerÚ
_UnpicklerÚ	Unpickler© r#   r#   ú&/usr/lib/python3.9/test/test_pickle.pyr   "   s   



r   c                   @   s6   e Zd ZejZefZeje	e
eejeefZdd„ ZdS )ÚPyUnpicklerTestsc                 K   s$   t  |¡}| j|fi |¤Ž}| ¡ S ©N©ÚioÚBytesIOÚ	unpicklerr   ©ÚselfÚbufÚkwdsÚfÚur#   r#   r$   r   3   s    
zPyUnpicklerTests.loadsN)r   r   r   r   r!   r*   Ú
IndexErrorÚbad_stack_errorsÚUnpicklingErrorÚEOFErrorÚAttributeErrorÚ
ValueErrorÚstructÚerrorÚImportErrorÚtruncated_errorsr   r#   r#   r#   r$   r%   +   s   þr%   c                   @   s*   e Zd ZejZejZddd„Zdd„ Z	dS )ÚPyPicklerTestsNc                 K   s<   t  ¡ }| j||fi |¤Ž}| |¡ | d¡ t| ¡ ƒS ©Nr   )r(   r)   Úpicklerr   ÚseekÚbytesÚread)r,   ÚargÚprotoÚkwargsr/   Úpr#   r#   r$   r   >   s
    

zPyPicklerTests.dumpsc                 K   s$   t  |¡}| j|fi |¤Ž}| ¡ S r&   r'   r+   r#   r#   r$   r   E   s    
zPyPicklerTests.loads)N)
r   r   r   r   r   r=   r!   r*   r   r   r#   r#   r#   r$   r;   9   s   
r;   c                   @   sB   e Zd ZejefZejeee	e
jeefZddd„Zdd„ ZdZdS )ÚInMemoryPickleTestsNc                 K   s   t j||fi |¤ŽS r&   )r   r   )r,   rA   ÚprotocolrC   r#   r#   r$   r   S   s    zInMemoryPickleTests.dumpsc                 K   s   t j|fi |¤ŽS r&   )r   r   )r,   r-   r.   r#   r#   r$   r   V   s    zInMemoryPickleTests.loads)N)r   r   r   r   r3   r1   r2   r4   r5   r6   r7   r8   r9   r:   r   r   Z+test_framed_write_sizes_with_delayed_writerr#   r#   r#   r$   rE   K   s   
þ
rE   c                   @   s   e Zd Zddd„Zdd„ ZdS )ÚPersistentPicklerUnpicklerMixinNc                    s:   G ‡ fdd„dˆ j ƒ}t ¡ }|||ƒ}| |¡ | ¡ S )Nc                       s   e Zd Z‡ fdd„ZdS )z:PersistentPicklerUnpicklerMixin.dumps.<locals>.PersPicklerc                    s
   ˆ   |¡S r&   )Úpersistent_id©ÚsubselfÚobj©r,   r#   r$   rH   `   s    zHPersistentPicklerUnpicklerMixin.dumps.<locals>.PersPickler.persistent_idN©r   r   r   rH   r#   rL   r#   r$   ÚPersPickler_   s   rN   )r=   r(   r)   r   Úgetvalue)r,   rA   rB   rN   r/   rD   r#   rL   r$   r   ^   s
    

z%PersistentPicklerUnpicklerMixin.dumpsc                    s8   G ‡ fdd„dˆ j ƒ}t |¡}||fi |¤Ž}| ¡ S )Nc                       s   e Zd Z‡ fdd„ZdS )z<PersistentPicklerUnpicklerMixin.loads.<locals>.PersUnpicklerc                    s
   ˆ   |¡S r&   )Úpersistent_loadrI   rL   r#   r$   rP   i   s    zLPersistentPicklerUnpicklerMixin.loads.<locals>.PersUnpickler.persistent_loadN©r   r   r   rP   r#   rL   r#   r$   ÚPersUnpicklerh   s   rR   )r*   r(   r)   r   )r,   r-   r.   rR   r/   r0   r#   rL   r$   r   g   s    
z%PersistentPicklerUnpicklerMixin.loads)N)r   r   r   r   r   r#   r#   r#   r$   rG   \   s   
	rG   c                   @   s   e Zd ZejZejZdS )ÚPyPersPicklerTestsN)r   r   r   r   r   r=   r!   r*   r#   r#   r#   r$   rS   p   s   rS   c                   @   s4   e Zd ZejZejZej	dd„ ƒZ
ej	dd„ ƒZdS )ÚPyIdPersPicklerTestsc                    s^   ‡ fdd„}G dd„ dˆ j ƒ}||ƒ G dd„ dˆ j ƒ}||ƒ G dd„ dˆ j ƒ}||ƒ d S )Nc                    s€   t tjd ƒD ]6}t ¡ }| ||ƒ}| d¡ ˆ  ˆ  | ¡ ¡d¡ q| t ¡ ƒ}ˆ  | 	d¡d¡ t
 |¡}~ˆ  |ƒ ¡ d S ©Né   ÚabcÚdef)Úranger   ÚHIGHEST_PROTOCOLr(   r)   r   ÚassertEqualr   rO   rH   ÚweakrefÚrefÚassertIsNone)r    rB   r/   r=   ÚrrL   r#   r$   Úcheck   s    


z@PyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.checkc                   @   s   e Zd Zdd„ ZdS )úFPyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.PersPicklerc                 S   s   |S r&   r#   rI   r#   r#   r$   rH   Œ   s    úTPyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.PersPickler.persistent_idNrM   r#   r#   r#   r$   rN   ‹   s   rN   c                   @   s   e Zd Zedd„ ƒZdS )ra   c                 S   s   |S r&   r#   )ÚclsrK   r#   r#   r$   rH   ‘   s    rb   N)r   r   r   ÚclassmethodrH   r#   r#   r#   r$   rN      s   c                   @   s   e Zd Zedd„ ƒZdS )ra   c                 S   s   | S r&   r#   )rK   r#   r#   r$   rH   —   s    rb   N)r   r   r   r   rH   r#   r#   r#   r$   rN   –   s   )r=   )r,   r`   rN   r#   rL   r$   Útest_pickler_reference_cycle}   s    z1PyIdPersPicklerTests.test_pickler_reference_cyclec                    s^   ‡ fdd„}G dd„ dˆ j ƒ}||ƒ G dd„ dˆ j ƒ}||ƒ G dd„ dˆ j ƒ}||ƒ d S )Nc                    st   t tjd ƒD ]*}| t ˆ  d|¡¡ƒ}ˆ  | ¡ d¡ q| t ¡ ƒ}ˆ  | d¡d¡ t	 
|¡}~ˆ  |ƒ ¡ d S rU   )rY   r   rZ   r(   r)   r   r[   r   rP   r\   r]   r^   )r"   rB   r*   r_   rL   r#   r$   r`   ž   s    
zBPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.checkc                   @   s   e Zd Zdd„ ZdS )úJPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.PersUnpicklerc                 S   s   |S r&   r#   )rJ   Úpidr#   r#   r$   rP   ©   s    úZPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.PersUnpickler.persistent_loadNrQ   r#   r#   r#   r$   rR   ¨   s   rR   c                   @   s   e Zd Zedd„ ƒZdS )rf   c                 S   s   |S r&   r#   )rc   rg   r#   r#   r$   rP   ®   s    rh   N)r   r   r   rd   rP   r#   r#   r#   r$   rR   ­   s   c                   @   s   e Zd Zedd„ ƒZdS )rf   c                 S   s   | S r&   r#   )rg   r#   r#   r$   rP   ´   s    rh   N)r   r   r   r   rP   r#   r#   r#   r$   rR   ³   s   )r*   )r,   r`   rR   r#   rL   r$   Útest_unpickler_reference_cycleœ   s    
z3PyIdPersPicklerTests.test_unpickler_reference_cycleN)r   r   r   r   r   r=   r!   r*   r   Úcpython_onlyre   ri   r#   r#   r#   r$   rT   w   s   
rT   c                   @   s   e Zd ZejZejZdS )ÚPyPicklerUnpicklerObjectTestsN)r   r   r   r   r   Úpickler_classr!   Úunpickler_classr#   r#   r#   r$   rk   º   s   rk   c                   @   s   e Zd ZejZdd„ ZdS )ÚPyDispatchTableTestsc                 C   s
   t j ¡ S r&   ©r   Údispatch_tableÚcopyrL   r#   r#   r$   Úget_dispatch_tableÄ   s    z'PyDispatchTableTests.get_dispatch_tableN©r   r   r   r   r   rl   rr   r#   r#   r#   r$   rn   À   s   rn   c                   @   s   e Zd ZejZdd„ ZdS )ÚPyChainDispatchTableTestsc                 C   s   t  i tj¡S r&   ©ÚcollectionsÚChainMapr   rp   rL   r#   r#   r$   rr   Ì   s    z,PyChainDispatchTableTests.get_dispatch_tableNrs   r#   r#   r#   r$   rt   È   s   rt   c                   @   s$   e Zd ZG dd„ dejeƒZeZdS )ÚPyPicklerHookTestsc                   @   s   e Zd ZdS )z'PyPicklerHookTests.CustomPyPicklerClassN©r   r   r   r#   r#   r#   r$   ÚCustomPyPicklerClassÑ   s   rz   N)r   r   r   r   r   r   rz   rl   r#   r#   r#   r$   rx   Ð   s   ÿrx   c                   @   s,   e Zd ZddlmZmZmZmZmZm	Z	 dS )ÚCPickleTestsr   )r   r   r   r   r    r"   N)
r   r   r   Ú_pickler   r   r   r   r    r"   r#   r#   r#   r$   r{   Ø   s   r{   c                   @   s"   e Zd ZejZejfZejfZ	dS )ÚCUnpicklerTestsN)
r   r   r   r|   r"   r*   r   r3   r2   r:   r#   r#   r#   r$   r}   Û   s   r}   c                   @   s   e Zd ZejZejZdS )ÚCPicklerTestsN©r   r   r   r|   r    r=   r"   r*   r#   r#   r#   r$   r~   à   s   r~   c                   @   s   e Zd ZejZejZdS )ÚCPersPicklerTestsNr   r#   r#   r#   r$   r€   ä   s   r€   c                   @   s   e Zd ZejZejZdS )ÚCIdPersPicklerTestsNr   r#   r#   r#   r$   r   è   s   r   c                   @   s   e Zd ZejZejZdS )ÚCDumpPickle_LoadPickleN)	r   r   r   r|   r    r=   r   r!   r*   r#   r#   r#   r$   r‚   ì   s   r‚   c                   @   s   e Zd ZejZejZdS )ÚDumpPickle_CLoadPickleN)	r   r   r   r   r   r=   r|   r"   r*   r#   r#   r#   r$   rƒ   ð   s   rƒ   c                   @   s    e Zd ZejZejZdd„ ZdS )ÚCPicklerUnpicklerObjectTestsc                 C   s€   |   t ¡ ¡}|  t¡ t|_W d   ƒ n1 s40    Y  |  t¡ dd i|_W d   ƒ n1 sh0    Y  dd i|_d S )NéÿÿÿÿrV   )rm   r(   r)   ZassertRaisesÚ	TypeErrorÚobjectÚmemor6   )r,   r*   r#   r#   r$   Útest_issue18339ø   s    $(z,CPicklerUnpicklerObjectTests.test_issue18339N)	r   r   r   r|   r    rl   r"   rm   r‰   r#   r#   r#   r$   r„   ô   s   r„   c                   @   s   e Zd ZejZdd„ ZdS )ÚCDispatchTableTestsc                 C   s
   t j ¡ S r&   ro   rL   r#   r#   r$   rr     s    z&CDispatchTableTests.get_dispatch_tableN©r   r   r   r   r    rl   rr   r#   r#   r#   r$   rŠ     s   rŠ   c                   @   s   e Zd ZejZdd„ ZdS )ÚCChainDispatchTableTestsc                 C   s   t  i tj¡S r&   ru   rL   r#   r#   r$   rr     s    z+CChainDispatchTableTests.get_dispatch_tableNr‹   r#   r#   r#   r$   rŒ     s   rŒ   c                   @   s$   e Zd ZG dd„ dejeƒZeZdS )ÚCPicklerHookTestsc                   @   s   e Zd ZdS )z%CPicklerHookTests.CustomCPicklerClassNry   r#   r#   r#   r$   ÚCustomCPicklerClass  s   rŽ   N)r   r   r   r|   r    r   rŽ   rl   r#   r#   r#   r$   r     s   r   c                   @   s"   e Zd ZejZdd„ Zdd„ ZdS )ÚSizeofTestsc                 C   sž   t  d¡}t t ¡ ¡}|  t |¡|¡ t	 
d¡}t	 
d¡}| j}|||| d|  t d¡ ƒ tdƒD ]}| t|ƒ¡ ql|||| d|  d ƒ d S )	NZ7P2n3i2n3i2PZ3nP0nZPn0Pé   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxé   é    r   )r   Úcalcobjsizer|   r    r(   r)   r[   r‡   Ú
__sizeof__r7   ÚcalcsizeÚcheck_sizeofÚsysÚ	getsizeofrY   r   Úchr)r,   ÚbasesizerD   ZMT_sizeZME_sizer`   Úir#   r#   r$   Útest_pickler  s,    


ÿÿþÿÿýzSizeofTests.test_picklerc                    sŽ  t  d¡}tj‰t d¡‰ t d¡‰| j‰dD ]\}dD ]R}ˆt ¡ ||d}|  	t
 |¡|¡ ˆ||dˆ   t|ƒ d t|ƒ d ƒ q6q.|td	ƒ d td
ƒ d ‰‡ ‡‡‡‡fdd„}|dddƒ |dgd ddƒ |dd„ tdƒD ƒddƒ dd„ }||dƒddƒ ||dƒddƒ ||dƒddƒ ||dƒddƒ ||dƒddƒ ˆt t dd¡¡d	d
d}| ¡  ˆ|ˆdˆ   d d ƒ d S )Nz2P2n2P 2P2n2i5P 2P3n8P2n2iÚPÚn)ÚASCIIzUTF-16zlatin-1)ÚstrictÚreplace©ÚencodingÚerrorsr’   rV   rŸ   r    c                    sD   t  | ¡}ˆt |¡ddd}| ¡  ˆ|ˆ|ˆ   |ˆ  ƒ d S )NrŸ   r    r¢   )r   r   r(   r)   r   )ÚdataZ	memo_sizeZ
marks_sizer   r0   ©r   r`   rž   Zstdsizer*   r#   r$   Úcheck_unpickler5  s    

ÿz3SizeofTests.test_unpickler.<locals>.check_unpicklerr   éd   é   c                 S   s   g | ]}t |ƒ‘qS r#   )r™   )Ú.0r›   r#   r#   r$   Ú
<listcomp>@  ó    z.SizeofTests.test_unpickler.<locals>.<listcomp>é€   c                 S   s   d}t | ƒD ]}||g}q|S r<   )rY   )Zdeepr¥   r›   r#   r#   r$   ÚrecurseA  s    
z+SizeofTests.test_unpickler.<locals>.recurseé2   é@   é<   éŒ   Úaé   )r   r“   r|   r"   r7   r•   r–   r(   r)   r[   r‡   r”   ÚlenrY   r   r   r   )r,   rš   r£   r¤   r0   r§   r®   r#   r¦   r$   Útest_unpickler%  sL    


ÿÿþþþþ
ÿzSizeofTests.test_unpicklerN)r   r   r   r   r–   rœ   r¶   r#   r#   r#   r$   r     s   r   >   )ÚStringIOr(   )Ú_elementtreezxml.etree.ElementTree)ÚcPickler   )Ú	cStringIOr(   >   )Ú
exceptionsÚStandardErrorÚbuiltinsÚ	Exception)ÚUserDictr¿   rv   r¿   )ÚsocketÚ_socketobjectrÀ   Ú
SocketType)Ú__builtin__Ú
basestringr½   Ústrc                 C   s6   | |ft v rt | |f \} }n| tv r.t|  } | |fS r&   )r   r   ©ÚmoduleÚnamer#   r#   r$   Úmapping`  s
    rÉ   c                 C   s6   | |ft v rt | |f \} }n| tv r.t|  } | |fS r&   )r   r   rÆ   r#   r#   r$   Úreverse_mappingg  s
    rÊ   c                 C   sî   zt j|  W S  tyè   zNt ¡ 2 tjr0dnd}t |t¡ t	| ƒ W d   ƒ n1 s\0    Y  W np t
y¦ } z&tjrŽtd| |f ƒ t‚W Y d }~n<d }~0  tyØ } ztjrÂt|ƒ ‚ W Y d }~n
d }~0 0 t j|   Y S 0 d S )NÚalwaysÚignorezCan't import module %r: %s)r—   ÚmodulesÚKeyErrorÚwarningsÚcatch_warningsr   ÚverboseÚsimplefilterÚDeprecationWarningÚ
__import__r5   Úprintr9   )rÇ   ÚactionÚexcr#   r#   r$   Ú	getmodulen  s"    
*rØ   c                 C   s&   t | ƒ}| d¡D ]}t||ƒ}q|S )NÚ.)rØ   ÚsplitÚgetattr)rÇ   rÈ   rK   rž   r#   r#   r$   Úgetattribute  s    rÜ   c                 c   s:   t | ƒD ],}t| |ƒ}t|tƒrt|tƒr||fV  qd S r&   )ÚdirrÛ   Ú
isinstanceÚtypeÚ
issubclassÚBaseException)ÚmodrÈ   Úattrr#   r#   r$   Úget_exceptions‡  s    
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 )ÚCompatPickleTestsc              	   C   sn   t t ¡ ƒ}|t tƒO }|dd„ tD ƒO }|dd„ t ¡ D ƒO }|D ]$}zt|ƒ W qD tyf   Y qD0 qDd S )Nc                 S   s   h | ]\}}|’qS r#   r#   ©rª   rÇ   rÈ   r#   r#   r$   Ú	<setcomp>‘  r¬   z0CompatPickleTests.test_import.<locals>.<setcomp>c                 S   s   h | ]\}}|’qS r#   r#   ræ   r#   r#   r$   rç   ’  r¬   )Úsetr   Úvaluesr   r   r   rØ   r9   )r,   rÍ   rÇ   r#   r#   r$   Útest_importŽ  s    zCompatPickleTests.test_importc              
   C   s   t  ¡ D ]‚\}}|  ||f¡\ zt|ƒ W n ty>   Y n0 |d d… dkrl|  |t¡ |  t| |¡ W d   ƒ q1 s€0    Y  qd S )NrV   Ú_)r   ÚitemsÚsubTestrØ   r9   ZassertInr   r[   )r,   Úmodule3Úmodule2r#   r#   r$   Útest_import_mapping™  s    z%CompatPickleTests.test_import_mappingc              
   C   s
  t  ¡ D ]ü\\}}\}}|  ||f||ff¡Æ ||fdkrXt||ƒ}|  t|tƒ¡ nŽ||fdkr€t||ƒ}|  t|tƒ¡ nft||ƒ\}}|d d… dkr²|  	||f||f¡ zt||ƒ}W n tyÒ   Y n0 |  	t||ƒ|¡ W d   ƒ q1 sú0    Y  qd S )N©r»   ÚOSError©r»   r9   rV   rë   )
r   rì   rí   rÜ   Z
assertTruerà   rò   r9   rÉ   r[   )r,   rî   Úname3rï   Úname2rã   rÇ   rÈ   r#   r#   r$   Útest_name_mapping¤  s     

z#CompatPickleTests.test_name_mappingc           	      C   s  t  ¡ D ]ö\}}|  ||f¡Ð zt|ƒ W n2 ty^ } ztjrJt|ƒ W Y d }~n
d }~0 0 ||ftvr¼t	 
|d ¡|kr¼t ¡ D ]$\\}}\}}||f||fkr„ q¼q„|  d||f ¡ t	 
||¡}t  
||¡}|  ||¡ W d   ƒ q1 sô0    Y  qd S )Nz No reverse mapping from %r to %r)r   rì   rí   rØ   r9   r   rÑ   rÕ   ÚALT_IMPORT_MAPPINGr   Úgetr   Zfailr[   )	r,   rï   rî   r×   Zm3Zn3Zm2Zn2rÇ   r#   r#   r$   Útest_reverse_import_mapping¸  s&    ÿÿz-CompatPickleTests.test_reverse_import_mappingc              
   C   sÊ   t  ¡ D ]¼\\}}\}}|  ||f||ff¡† zt||ƒ}W n tyP   Y n0 t||ƒ\}}||||ftvr„|  ||f||f¡ t||ƒ\}}|  ||f||f¡ W d   ƒ q1 sº0    Y  qd S r&   )	r   rì   rí   rÜ   r9   rÊ   ÚALT_NAME_MAPPINGr[   rÉ   )r,   rï   rõ   rî   rô   rã   rÇ   rÈ   r#   r#   r$   Útest_reverse_name_mappingÌ  s    z+CompatPickleTests.test_reverse_name_mappingc              	   C   sH  |   tddƒd¡ |   tddƒd¡ |   tddƒd¡ |   tddƒd¡ |   tddƒd	¡ ttƒD ]à\}}|  |¡¼ |tttt	fv r”W d   ƒ qb|t
urºt|t
ƒrº|   td|ƒd	¡ nh|turöt|tƒrö|   td|ƒd
¡ |   td|ƒd|f¡ n,|   td|ƒd|f¡ |   td|ƒd|f¡ W d   ƒ qb1 s80    Y  qbd S )Nr»   r¼   )r½   r¾   r¾   r½   )r»   r¾   rò   )r½   rò   rñ   ró   )r[   rÉ   rÊ   rä   r½   rí   ÚBlockingIOErrorÚResourceWarningÚStopAsyncIterationÚRecursionErrorrò   rà   r9   )r,   rÈ   r×   r#   r#   r$   Útest_exceptionsÙ  sP    ÿÿÿÿÿýÿÿÿÿÿz!CompatPickleTests.test_exceptionsc              	   C   sv   t  d¡}t|ƒD ]^\}}|  |¡< |  td|ƒd|f¡ |  td|ƒd|f¡ W d   ƒ q1 sf0    Y  qd S )Nzmultiprocessing.contextÚmultiprocessing)r   Úimport_modulerä   rí   r[   rÊ   rÉ   )r,   rÇ   rÈ   r×   r#   r#   r$   Útest_multiprocessing_exceptionsú  s    
ÿÿz1CompatPickleTests.test_multiprocessing_exceptionsN)
r   r   r   rê   rð   rö   rù   rû   r   r  r#   r#   r#   r$   rå     s   !rå   c                 C   s   |  t ¡ ¡ |S r&   )ZaddTestÚdoctestZDocTestSuite)ÚloaderZtestsÚpatternr#   r#   r$   Ú
load_tests  s    r  Ú__main__)DÚ_compat_pickler   r   r   r   r½   r   r(   rv   r7   r—   rÏ   r\   r  ZunittestÚtestr   Ztest.pickletesterr   r   r	   r
   r   r   r   r   r   r   r|   Zhas_c_implementationr9   ZTestCaser   r%   r;   rE   r‡   rG   rS   rT   rk   rn   rt   rx   r{   r}   r~   r€   r   r‚   rƒ   r„   rŠ   rŒ   r   rj   r   r÷   rú   rÉ   rÊ   rØ   rÜ   rä   rå   r  r   Úmainr#   r#   r#   r$   Ú<module>   sˆ   
	ÿÿÿCAw
