o
    HXîhÜN  ã                   @   sN  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 d dlmZ zd dlZdZW n e y   dZY nw 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rqG d'd(„ d(eej!ƒZ.G d)d*„ d*e#ƒZ/G d+d,„ d,e$ƒZ0G d-d.„ d.e(ƒZ1G d/d0„ d0e)ƒZ2G d1d2„ d2e$ƒZ3G d3d4„ d4e$ƒZ4G d5d6„ d6eej!ƒZ5G d7d8„ d8eej!ƒZ6G d9d:„ d:eej!ƒZ7G d;d<„ d<eej!ƒZ8ej9G d=d>„ d>ej!ƒƒZ:h d?£Z;h d@£Z<dAdB„ Z=dCdD„ Z>dEdF„ Z?dGdH„ Z@dIdJ„ ZAG dKdL„ dLej!ƒZBdMdN„ ZCeDdOkr¥e E¡  dS dS )Pé    )ÚIMPORT_MAPPINGÚREVERSE_IMPORT_MAPPINGÚNAME_MAPPINGÚREVERSE_NAME_MAPPINGN)Úsupport)Úimport_helper)Ú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$   ú:/opt/python-3.10.19/usr/lib/python3.10/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   ó$   t  |¡}| j|fi |¤Ž}| ¡ S ©N©ÚioÚBytesIOÚ	unpicklerr   ©ÚselfÚbufÚkwdsÚfÚur$   r$   r%   r   4   ó   
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Úkwargsr1   Úpr$   r$   r%   r   ?   s
   

zPyPicklerTests.dumpsc                 K   r'   r(   r)   r-   r$   r$   r%   r   F   r3   zPyPicklerTests.loadsr(   )
r   r   r   r   r    r@   r"   r,   r   r   r$   r$   r$   r%   r>   :   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.   rD   ÚprotocolrF   r$   r$   r%   r   T   s   zInMemoryPickleTests.dumpsc                 K   s   t j|fi |¤ŽS r(   )r   r   )r.   r/   r0   r$   r$   r%   r   W   s   zInMemoryPickleTests.loadsr(   )r   r   r   r   r6   r4   r5   r7   r8   r9   r:   r;   r<   r=   r   r   Z+test_framed_write_sizes_with_delayed_writerr$   r$   r$   r%   rH   L   s    
þ
rH   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                       ó   e Zd Z‡ fdd„ZdS )z:PersistentPicklerUnpicklerMixin.dumps.<locals>.PersPicklerc                    ó
   ˆ   |¡S r(   )Úpersistent_id©ÚsubselfÚobj©r.   r$   r%   rM   a   ó   
zHPersistentPicklerUnpicklerMixin.dumps.<locals>.PersPickler.persistent_idN©r   r   r   rM   r$   rQ   r$   r%   ÚPersPickler`   ó    rT   )r@   r*   r+   r   Úgetvalue)r.   rD   rE   rT   r1   rG   r$   rQ   r%   r   _   s
   

z%PersistentPicklerUnpicklerMixin.dumpsc                    s8   G ‡ fdd„dˆ j ƒ}t |¡}||fi |¤Ž}| ¡ S )Nc                       rK   )z<PersistentPicklerUnpicklerMixin.loads.<locals>.PersUnpicklerc                    rL   r(   )Úpersistent_loadrN   rQ   r$   r%   rW   j   rR   zLPersistentPicklerUnpicklerMixin.loads.<locals>.PersUnpickler.persistent_loadN©r   r   r   rW   r$   rQ   r$   r%   ÚPersUnpickleri   rU   rY   )r,   r*   r+   r   )r.   r/   r0   rY   r1   r2   r$   rQ   r%   r   h   s   
z%PersistentPicklerUnpicklerMixin.loadsr(   )r   r   r   r   r   r$   r$   r$   r%   rJ   ]   s    
	rJ   c                   @   ó   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%   r[   q   s    
r[   c                   @   sB   e Zd ZejZejZej	dd„ ƒZ
ej	dd„ ƒZej	dd„ ƒZdS )ÚPyIdPersPicklerTestsc                    ó^   ‡ 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 ]}t ¡ }| ||ƒ}| d¡ ˆ  ˆ  | ¡ ¡d¡ q| t ¡ ƒ}ˆ  | 	d¡d¡ t
 |¡}~ˆ  |ƒ ¡ d S ©Né   ÚabcÚdef)Úranger   ÚHIGHEST_PROTOCOLr*   r+   r   ÚassertEqualr   rV   rM   ÚweakrefÚrefÚassertIsNone)r!   rE   r1   r@   ÚrrQ   r$   r%   Úcheck€   s   


z@PyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.checkc                   @   ó   e Zd Zdd„ ZdS )úFPyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.PersPicklerc                 S   ó   |S r(   r$   rN   r$   r$   r%   rM      ó   úTPyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.PersPickler.persistent_idNrS   r$   r$   r$   r%   rT   Œ   ó    rT   c                   @   ó   e Zd Zedd„ ƒZdS )rk   c                 S   rl   r(   r$   )ÚclsrP   r$   r$   r%   rM   ’   ó   rn   N)r   r   r   ÚclassmethodrM   r$   r$   r$   r%   rT   ‘   ó    c                   @   rp   )rk   c                 S   ó   | S r(   r$   )rP   r$   r$   r%   rM   ˜   rr   rn   N)r   r   r   r   rM   r$   r$   r$   r%   rT   —   rt   )r@   )r.   ri   rT   r$   rQ   r%   Útest_pickler_reference_cycle~   s   z1PyIdPersPicklerTests.test_pickler_reference_cyclec                    sv   G ‡ fdd„d| j ƒ}G dd„ dƒ}|ƒ ‰ |t ¡ ƒ}|  |jˆ ¡ t ˆ ¡}|  |ƒ ¡ ~Š t 	¡  |  
|ƒ ¡ d S )Nc                       s   e Zd Z‡ ‡fdd„Z‡  ZS )zPPyIdPersPicklerTests.test_custom_pickler_dispatch_table_memleak.<locals>.Picklerc                    s   ˆ| _ tƒ j|i |¤Ž d S r(   )Údispatch_tableÚsuperÚ__init__)r.   ÚargsrF   )Ú	__class__Útabler$   r%   ry   ¢   s   zYPyIdPersPicklerTests.test_custom_pickler_dispatch_table_memleak.<locals>.Pickler.__init__)r   r   r   ry   Ú__classcell__r$   ©r|   )r{   r%   r!   ¡   s    r!   c                   @   ó   e Zd ZdS )zVPyIdPersPicklerTests.test_custom_pickler_dispatch_table_memleak.<locals>.DispatchTableN©r   r   r   r$   r$   r$   r%   ÚDispatchTable¦   ó    r   )r@   r*   r+   ZassertIsrw   re   rf   ZassertIsNotNoner   Ú
gc_collectrg   )r.   r!   r   r@   Z	table_refr$   r~   r%   Ú*test_custom_pickler_dispatch_table_memleak   s   
z?PyIdPersPicklerTests.test_custom_pickler_dispatch_table_memleakc                    r]   )Nc                    st   t tjd ƒD ]}| t ˆ  d|¡¡ƒ}ˆ  | ¡ d¡ q| t ¡ ƒ}ˆ  | d¡d¡ t	 
|¡}~ˆ  |ƒ ¡ d S r^   )rb   r   rc   r*   r+   r   rd   r   rW   re   rf   rg   )r#   rE   r,   rh   rQ   r$   r%   ri   ¶   s   
zBPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.checkc                   @   rj   )úJPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.PersUnpicklerc                 S   rl   r(   r$   )rO   Úpidr$   r$   r%   rW   Á   rm   úZPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.PersUnpickler.persistent_loadNrX   r$   r$   r$   r%   rY   À   ro   rY   c                   @   rp   )r…   c                 S   rl   r(   r$   )rq   r†   r$   r$   r%   rW   Æ   rr   r‡   N)r   r   r   rs   rW   r$   r$   r$   r%   rY   Å   rt   c                   @   rp   )r…   c                 S   ru   r(   r$   )r†   r$   r$   r%   rW   Ì   rr   r‡   N)r   r   r   r   rW   r$   r$   r$   r%   rY   Ë   rt   )r,   )r.   ri   rY   r$   rQ   r%   Útest_unpickler_reference_cycle´   s   
z3PyIdPersPicklerTests.test_unpickler_reference_cycleN)r   r   r   r   r    r@   r"   r,   r   Úcpython_onlyrv   r„   rˆ   r$   r$   r$   r%   r\   x   s    

r\   c                   @   rZ   )ÚPyPicklerUnpicklerObjectTestsN)r   r   r   r   r    Úpickler_classr"   Úunpickler_classr$   r$   r$   r%   rŠ   Ò   s    
rŠ   c                   @   ó   e Zd ZejZdd„ ZdS )ÚPyDispatchTableTestsc                 C   ó
   t j ¡ S r(   ©r   rw   ÚcopyrQ   r$   r$   r%   Úget_dispatch_tableÜ   rR   z'PyDispatchTableTests.get_dispatch_tableN©r   r   r   r   r    r‹   r’   r$   r$   r$   r%   rŽ   Ø   ó    rŽ   c                   @   r   )ÚPyChainDispatchTableTestsc                 C   ó   t  i tj¡S r(   ©ÚcollectionsÚChainMapr   rw   rQ   r$   r$   r%   r’   ä   ó   z,PyChainDispatchTableTests.get_dispatch_tableNr“   r$   r$   r$   r%   r•   à   r”   r•   c                   @   ó$   e Zd ZG dd„ dejeƒZeZdS )ÚPyPicklerHookTestsc                   @   r   )z'PyPicklerHookTests.CustomPyPicklerClassNr€   r$   r$   r$   r%   ÚCustomPyPicklerClassé   s    r   N)r   r   r   r   r    r   r   r‹   r$   r$   r$   r%   rœ   è   s
    ÿrœ   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   r6   r5   r=   r$   r$   r$   r%   r    ó   s    r    c                   @   rZ   )ÚCPicklerTestsN©r   r   r   rŸ   r!   r@   r#   r,   r$   r$   r$   r%   r¡   ø   ó    
r¡   c                   @   rZ   )ÚCPersPicklerTestsNr¢   r$   r$   r$   r%   r¤   ü   r£   r¤   c                   @   rZ   )ÚCIdPersPicklerTestsNr¢   r$   r$   r$   r%   r¥      r£   r¥   c                   @   ó   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§     r£   r§   c                   @   r¦   )ÚDumpPickle_CLoadPickleN)	r   r   r   r   r    r@   rŸ   r#   r,   r$   r$   r$   r%   r¨     r£   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 sw   Y  |  t¡ dd i|_W d   ƒ n1 s4w   Y  dd i|_d S )Néÿÿÿÿr_   )rŒ   r*   r+   ZassertRaisesÚ	TypeErrorÚobjectÚmemor9   )r.   r,   r$   r$   r%   Útest_issue18339  s   ÿÿz,CPicklerUnpicklerObjectTests.test_issue18339N)	r   r   r   rŸ   r!   r‹   r#   rŒ   r®   r$   r$   r$   r%   r©     s    r©   c                   @   r   )ÚCDispatchTableTestsc                 C   r   r(   r   rQ   r$   r$   r%   r’     rR   z&CDispatchTableTests.get_dispatch_tableN©r   r   r   r   r!   r‹   r’   r$   r$   r$   r%   r¯     ó    r¯   c                   @   r   )ÚCChainDispatchTableTestsc                 C   r–   r(   r—   rQ   r$   r$   r%   r’      rš   z+CChainDispatchTableTests.get_dispatch_tableNr°   r$   r$   r$   r%   r²     r±   r²   c                   @   r›   )ÚCPicklerHookTestsc                   @   r   )z%CPicklerHookTests.CustomCPicklerClassNr€   r$   r$   r$   r%   ÚCustomCPicklerClass$  r‚   r´   N)r   r   r   rŸ   r!   r   r´   r‹   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|ƒ¡ q6|||| d|  d ƒ d S )	NZ7P2n3i2n3i2PZ3nP0nZPn0Pé   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxé   é    r   )r   ÚcalcobjsizerŸ   r!   r*   r+   rd   r¬   Ú
__sizeof__r:   ÚcalcsizeÚcheck_sizeofÚsysÚ	getsizeofrb   r   Úchr)r.   ÚbasesizerG   ZMT_sizeZME_sizeri   Úir$   r$   r%   Útest_pickler,  s,   


ÿÿþÿÿ
ýzSizeofTests.test_picklerc                    sŽ  t  d¡}tj‰t d¡‰ t d¡‰| j‰dD ].}dD ])}ˆt ¡ ||d}|  	t
 |¡|¡ ˆ||dˆ   t|ƒ d t|ƒ d ƒ qq|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¸   r_   rÅ   rÆ   c                    sD   t  | ¡}ˆt |¡ddd}| ¡  ˆ|ˆ|ˆ   |ˆ  ƒ d S )NrÅ   rÆ   rÈ   )r   r   r*   r+   r   )ÚdataZ	memo_sizeZ
marks_sizer   r2   ©rÃ   ri   rÄ   Zstdsizer,   r$   r%   Úcheck_unpicklerM  s   

ÿz3SizeofTests.test_unpickler.<locals>.check_unpicklerr   éd   é   c                 S   s   g | ]}t |ƒ‘qS r$   )r¿   )Ú.0rÁ   r$   r$   r%   Ú
<listcomp>X  ó    z.SizeofTests.test_unpickler.<locals>.<listcomp>é€   c                 S   s   d}t | ƒD ]}||g}q|S r?   )rb   )ZdeeprË   rÁ   r$   r$   r%   ÚrecurseY  s   
z+SizeofTests.test_unpickler.<locals>.recurseé2   é@   é<   éŒ   Úaé   )r   r¹   rŸ   r#   r:   r»   r¼   r*   r+   rd   r¬   rº   Úlenrb   r   r   r   )r.   rÀ   rÉ   rÊ   r2   rÍ   rÔ   r$   rÌ   r%   Útest_unpickler=  sN   


ÿÿþþþþüÿzSizeofTests.test_unpicklerN)r   r   r   r   r¼   rÂ   rÜ   r$   r$   r$   r%   rµ   (  s    rµ   >   )Ú_elementtreezxml.etree.ElementTree)ÚcPickler   )Ú	cStringIOr*   )ÚStringIOr*   >   )Ú__builtin__Ú
basestringÚbuiltinsÚstr)ÚsocketÚ_socketobjectrå   Ú
SocketType)ÚUserDictrè   r˜   rè   )Ú
exceptionsÚStandardErrorrã   Ú	Exceptionc                 C   ó<   | |ft v rt | |f \} }| |fS | tv rt|  } | |fS r(   )r   r   ©ÚmoduleÚnamer$   r$   r%   Úmappingx  ó   þrð   c                 C   rì   r(   )r   r   rí   r$   r$   r%   Úreverse_mapping  rñ   rò   c                 C   sÒ   zt j|  W S  tyh   z't ¡  tjrdnd}t |t¡ t	| ƒ W d   ƒ n1 s.w   Y  W n, t
yM } ztjrGtd| |f ƒ t‚d }~w ty` } ztjr[t|ƒ ‚ d }~ww t j|   Y S w )NÚalwaysÚignorezCan't import module %r: %s)r½   ÚmodulesÚKeyErrorÚwarningsÚcatch_warningsr   ÚverboseÚsimplefilterÚDeprecationWarningÚ
__import__r8   Úprintr<   )rî   ÚactionÚexcr$   r$   r%   Ú	getmodule†  s.   

ý€€€ýòr   c                 C   s&   t | ƒ}| d¡D ]}t||ƒ}q	|S )NÚ.)r   ÚsplitÚgetattr)rî   rï   rP   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   sl   t t ¡ ƒ}|t tƒO }|dd„ tD ƒO }|dd„ t ¡ D ƒO }|D ]}zt|ƒ W q" ty3   Y q"w d S )Nc                 S   ó   h | ]\}}|’qS r$   r$   ©rÐ   rî   rï   r$   r$   r%   Ú	<setcomp>©  rÒ   z0CompatPickleTests.test_import.<locals>.<setcomp>c                 S   r  r$   r$   r  r$   r$   r%   r  ª  rÒ   )Úsetr   Úvaluesr   r   r   r   r<   )r.   rõ   rî   r$   r$   r%   Útest_import¦  s   ÿýzCompatPickleTests.test_importc              
   C   s   t  ¡ D ]A\}}|  ||f¡. zt|ƒ W n	 ty   Y nw |d d… dkr6|  |t¡ |  t| |¡ W d   ƒ n1 s@w   Y  qd S )Nr_   Ú_)r   ÚitemsÚsubTestr   r<   ZassertInr   rd   )r.   Úmodule3Úmodule2r$   r$   r%   Útest_import_mapping±  s   ÿ€ù€ÿz%CompatPickleTests.test_import_mappingc              
   C   s
  t  ¡ D ]~\\}}\}}|  ||f||ff¡c ||fdkr,t||ƒ}|  t|tƒ¡ nG||fdkr@t||ƒ}|  t|tƒ¡ n3t||ƒ\}}|d d… dkrY|  	||f||f¡ zt||ƒ}W n	 tyi   Y n
w |  	t||ƒ|¡ W d   ƒ n1 s}w   Y  qd S )N©ré   ÚOSError©ré   r<   r_   r  )
r   r  r  r  Z
assertTruer  r  r<   rð   rd   )r.   r  Úname3r  Úname2r  rî   rï   r$   r$   r%   Útest_name_mapping¼  s*   

ÿ€ð€ÿz#CompatPickleTests.test_name_mappingc           	      C   s  t  ¡ D ]{\}}|  ||f¡h zt|ƒ W n ty/ } ztjr%t|ƒ W Y d }~nd }~ww ||ftvr^t	 
|d ¡|kr^t ¡ D ]\\}}\}}||f||fkrT n
qB|  d||f ¡ t	 
||¡}t  
||¡}|  ||¡ W d   ƒ n1 szw   Y  qd S )Nz No reverse mapping from %r to %r)r   r  r  r   r<   r   rù   rý   ÚALT_IMPORT_MAPPINGr   Úgetr   Zfailrd   )	r.   r  r  rÿ   Zm3Zn3Zm2Zn2rî   r$   r$   r%   Útest_reverse_import_mappingÐ  s0   €þÿÿð€ÿz-CompatPickleTests.test_reverse_import_mappingc              
   C   sÊ   t  ¡ D ]^\\}}\}}|  ||f||ff¡C zt||ƒ}W n	 ty(   Y nw t||ƒ\}}||||ftvrB|  ||f||f¡ t||ƒ\}}|  ||f||f¡ W d   ƒ n1 s]w   Y  qd S r(   )	r   r  r  r  r<   rò   ÚALT_NAME_MAPPINGrd   rð   )r.   r  r  r  r  r  rî   rï   r$   r$   r%   Útest_reverse_name_mappingä  s   ÿ÷€ÿz+CompatPickleTests.test_reverse_name_mappingc              	   C   sJ  |   tddƒd¡ |   tddƒd¡ |   tddƒd¡ |   tddƒd¡ |   tddƒd	¡ ttƒD ]q\}}|  |¡` |tttt	t
fv rL	 W d   ƒ q1|tur_t|tƒr_|   td|ƒd	¡ n4|tur}t|tƒr}|   td|ƒd
¡ |   td|ƒd|f¡ n|   td|ƒd|f¡ |   td|ƒd|f¡ W d   ƒ n1 sw   Y  q1d S )Nré   rê   )rã   rë   rë   rã   )ré   rë   r  )rã   r  r  r  )rd   rð   rò   r  rã   r  ÚBlockingIOErrorÚResourceWarningÚStopAsyncIterationÚRecursionErrorÚEncodingWarningr  r  r<   )r.   rï   rÿ   r$   r$   r%   Útest_exceptionsñ  s\   ÿÿÿÿÿüúÿÿÿÿÿ€î€ÿz!CompatPickleTests.test_exceptionsc              	   C   sv   t  d¡}t|ƒD ]/\}}|  |¡ |  td|ƒd|f¡ |  td|ƒd|f¡ W d   ƒ n1 s3w   Y  q	d S )Nzmultiprocessing.contextÚmultiprocessing)r   Úimport_moduler  r  rd   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   r1  Ú__main__)FÚ_compat_pickler   r   r   r   rã   r   r*   r˜   r:   r½   r÷   re   r.  ZunittestÚtestr   Ztest.supportr   Ztest.pickletesterr   r	   r
   r   r   r   r   r   r   r   rŸ   Zhas_c_implementationr<   ZTestCaser   r&   r>   rH   r¬   rJ   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  r1  r   Úmainr$   r$   r$   r%   Ú<module>   s    ÿ	ÿÿÿZAx
ÿ