B
    18™\JJ  ã               @   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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 yd dlZdZW n ek
rì   dZY nX G dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deeeƒZG dd„ deƒZ G dd„ dee ƒZ!G dd„ dee ƒZ"G dd„ deƒZ#G dd„ deƒZ$G d d!„ d!eƒZ%erTG d"d#„ d#eƒZ&G d$d%„ d%eƒZ'G d&d'„ d'eƒZ(G d(d)„ d)e!ƒZ)G d*d+„ d+e"ƒZ*G d,d-„ d-eƒZ+G d.d/„ d/eƒZ,G d0d1„ d1eƒZ-G d2d3„ d3eƒZ.G d4d5„ d5eƒZ/ej0G d6d7„ d7ej1ƒƒZ2d8d9d:d;hZ3d<d=d>d?hZ4d@dA„ Z5dBdC„ Z6dDdE„ Z7dFdG„ Z8dHdI„ Z9G dJdK„ dKej1ƒZ:dLdM„ Z;e<dNkr¾e;ƒ  dS )Oé    )ÚIMPORT_MAPPINGÚREVERSE_IMPORT_MAPPINGÚNAME_MAPPINGÚREVERSE_NAME_MAPPINGN)Úsupport)ÚAbstractUnpickleTests)ÚAbstractPickleTests)ÚAbstractPickleModuleTests)ÚAbstractPersistentPicklerTests)Ú&AbstractIdentityPersistentPicklerTests)Ú#AbstractPicklerUnpicklerObjectTests)ÚAbstractDispatchTableTests)Ú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!   úT/oak/stanford/groups/akundaje/marinovg/programs/Python-3.7.3/Lib/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|Ž}| ¡ S )N)ÚioÚBytesIOÚ	unpicklerr   )ÚselfÚbufÚkwdsÚfÚur!   r!   r"   r   /   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             C   s4   t  ¡ }|  ||¡}| |¡ | d¡ t| ¡ ƒS )Nr   )r$   r%   Úpicklerr   ÚseekÚbytesÚread)r'   ÚargÚprotor*   Úpr!   r!   r"   r   :   s
    

zPyPicklerTests.dumpsc             K   s    t  |¡}| j|f|Ž}| ¡ S )N)r$   r%   r&   r   )r'   r(   r)   r*   r+   r!   r!   r"   r   A   s    
zPyPicklerTests.loads)N)
r   r   r   r   r   r7   r   r&   r   r   r!   r!   r!   r"   r6   5   s   
r6   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             C   s   t  ||¡S )N)r   r   )r'   r;   Úprotocolr!   r!   r"   r   O   s    zInMemoryPickleTests.dumpsc             K   s   t j|f|ŽS )N)r   r   )r'   r(   r)   r!   r!   r"   r   R   s    zInMemoryPickleTests.loads)N)r   r   r   r   r.   r,   r-   r/   r0   r1   r2   r3   r4   r5   r   r   Z+test_framed_write_sizes_with_delayed_writerr!   r!   r!   r"   r>   G   s   

r>   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 )N)Úpersistent_id)ÚsubselfÚobj)r'   r!   r"   rA   \   s    zHPersistentPicklerUnpicklerMixin.dumps.<locals>.PersPickler.persistent_idN)r   r   r   rA   r!   )r'   r!   r"   ÚPersPickler[   s   rD   )r7   r$   r%   r   Úgetvalue)r'   r;   r<   rD   r*   r=   r!   )r'   r"   r   Z   s
    

z%PersistentPicklerUnpicklerMixin.dumpsc                s4   G ‡ fdd„dˆ j ƒ}t |¡}||f|Ž}| ¡ S )Nc                   s   e Zd Z‡ fdd„ZdS )z<PersistentPicklerUnpicklerMixin.loads.<locals>.PersUnpicklerc                s
   ˆ   |¡S )N)Úpersistent_load)rB   rC   )r'   r!   r"   rF   e   s    zLPersistentPicklerUnpicklerMixin.loads.<locals>.PersUnpickler.persistent_loadN)r   r   r   rF   r!   )r'   r!   r"   ÚPersUnpicklerd   s   rG   )r&   r$   r%   r   )r'   r(   r)   rG   r*   r+   r!   )r'   r"   r   c   s    
z%PersistentPicklerUnpicklerMixin.loads)N)r   r   r   r   r   r!   r!   r!   r"   r@   X   s   
	r@   c               @   s   e Zd ZejZejZdS )ÚPyPersPicklerTestsN)r   r   r   r   r   r7   r   r&   r!   r!   r!   r"   rH   l   s   rH   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„   xHt tjd ƒD ]6}t ¡ }| ||ƒ}| d¡ ˆ  ˆ  | ¡ ¡d¡ qW | t ¡ ƒ}ˆ  | 	d¡d¡ t
 |¡}~ˆ  |ƒ ¡ d S )Né   ÚabcÚdef)Úranger   ÚHIGHEST_PROTOCOLr$   r%   r   ÚassertEqualr   rE   rA   ÚweakrefÚrefÚassertIsNone)r   r<   r*   r7   Úr)r'   r!   r"   Úcheck{   s    


z@PyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.checkc               @   s   e Zd Zdd„ ZdS )zFPyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.PersPicklerc             S   s   |S )Nr!   )rB   rC   r!   r!   r"   rA   ˆ   s    zTPyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.PersPickler.persistent_idN)r   r   r   rA   r!   r!   r!   r"   rD   ‡   s   rD   c               @   s   e Zd Zedd„ ƒZdS )zFPyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.PersPicklerc             S   s   |S )Nr!   )ÚclsrC   r!   r!   r"   rA      s    zTPyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.PersPickler.persistent_idN)r   r   r   ÚclassmethodrA   r!   r!   r!   r"   rD   Œ   s   c               @   s   e Zd Zedd„ ƒZdS )zFPyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.PersPicklerc             S   s   | S )Nr!   )rC   r!   r!   r"   rA   “   s    zTPyIdPersPicklerTests.test_pickler_reference_cycle.<locals>.PersPickler.persistent_idN)r   r   r   r   rA   r!   r!   r!   r"   rD   ’   s   )r7   )r'   rT   rD   r!   )r'   r"   Útest_pickler_reference_cycley   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                sx   x<t tjd ƒD ]*}| t ˆ  d|¡¡ƒ}ˆ  | ¡ d¡ qW | t ¡ ƒ}ˆ  | d¡d¡ t	 
|¡}~ˆ  |ƒ ¡ d S )NrJ   rK   rL   )rM   r   rN   r$   r%   r   rO   r   rF   rP   rQ   rR   )r    r<   r&   rS   )r'   r!   r"   rT   š   s    
zBPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.checkc               @   s   e Zd Zdd„ ZdS )zJPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.PersUnpicklerc             S   s   |S )Nr!   )rB   Úpidr!   r!   r"   rF   ¥   s    zZPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.PersUnpickler.persistent_loadN)r   r   r   rF   r!   r!   r!   r"   rG   ¤   s   rG   c               @   s   e Zd Zedd„ ƒZdS )zJPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.PersUnpicklerc             S   s   |S )Nr!   )rU   rX   r!   r!   r"   rF   ª   s    zZPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.PersUnpickler.persistent_loadN)r   r   r   rV   rF   r!   r!   r!   r"   rG   ©   s   c               @   s   e Zd Zedd„ ƒZdS )zJPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.PersUnpicklerc             S   s   | S )Nr!   )rX   r!   r!   r"   rF   °   s    zZPyIdPersPicklerTests.test_unpickler_reference_cycle.<locals>.PersUnpickler.persistent_loadN)r   r   r   r   rF   r!   r!   r!   r"   rG   ¯   s   )r&   )r'   rT   rG   r!   )r'   r"   Útest_unpickler_reference_cycle˜   s    
z3PyIdPersPicklerTests.test_unpickler_reference_cycleN)r   r   r   r   r   r7   r   r&   r   Úcpython_onlyrW   rY   r!   r!   r!   r"   rI   s   s   rI   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"   r[   ¶   s   r[   c               @   s   e Zd ZejZdd„ ZdS )ÚPyDispatchTableTestsc             C   s
   t j ¡ S )N)r   Údispatch_tableÚcopy)r'   r!   r!   r"   Úget_dispatch_tableÀ   s    z'PyDispatchTableTests.get_dispatch_tableN)r   r   r   r   r   r\   ra   r!   r!   r!   r"   r^   ¼   s   r^   c               @   s   e Zd ZejZdd„ ZdS )ÚPyChainDispatchTableTestsc             C   s   t  i tj¡S )N)ÚcollectionsÚChainMapr   r_   )r'   r!   r!   r"   ra   È   s    z,PyChainDispatchTableTests.get_dispatch_tableN)r   r   r   r   r   r\   ra   r!   r!   r!   r"   rb   Ä   s   rb   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"   re   Í   s   re   c               @   s"   e Zd ZejZejfZejfZ	dS )ÚCUnpicklerTestsN)
r   r   r   rf   r    r&   r   r.   r-   r5   r!   r!   r!   r"   rg   Ð   s   rg   c               @   s   e Zd ZejZejZdS )ÚCPicklerTestsN)r   r   r   rf   r   r7   r    r&   r!   r!   r!   r"   rh   Õ   s   rh   c               @   s   e Zd ZejZejZdS )ÚCPersPicklerTestsN)r   r   r   rf   r   r7   r    r&   r!   r!   r!   r"   ri   Ù   s   ri   c               @   s   e Zd ZejZejZdS )ÚCIdPersPicklerTestsN)r   r   r   rf   r   r7   r    r&   r!   r!   r!   r"   rj   Ý   s   rj   c               @   s   e Zd ZejZejZdS )ÚCDumpPickle_LoadPickleN)	r   r   r   rf   r   r7   r   r   r&   r!   r!   r!   r"   rk   á   s   rk   c               @   s   e Zd ZejZejZdS )ÚDumpPickle_CLoadPickleN)	r   r   r   r   r   r7   rf   r    r&   r!   r!   r!   r"   rl   å   s   rl   c               @   s    e Zd ZejZejZdd„ ZdS )ÚCPicklerUnpicklerObjectTestsc          	   C   sX   |   t ¡ ¡}|  t¡ t|_W d Q R X |  t¡ dd i|_W d Q R X dd i|_d S )NéÿÿÿÿrJ   )r]   r$   r%   ÚassertRaisesÚ	TypeErrorÚobjectÚmemor1   )r'   r&   r!   r!   r"   Útest_issue18339í   s    z,CPicklerUnpicklerObjectTests.test_issue18339N)	r   r   r   rf   r   r\   r    r]   rs   r!   r!   r!   r"   rm   é   s   rm   c               @   s   e Zd ZejZdd„ ZdS )ÚCDispatchTableTestsc             C   s
   t j ¡ S )N)r   r_   r`   )r'   r!   r!   r"   ra   ø   s    z&CDispatchTableTests.get_dispatch_tableN)r   r   r   r   r   r\   ra   r!   r!   r!   r"   rt   ö   s   rt   c               @   s   e Zd ZejZdd„ ZdS )ÚCChainDispatchTableTestsc             C   s   t  i tj¡S )N)rc   rd   r   r_   )r'   r!   r!   r"   ra   ý   s    z+CChainDispatchTableTests.get_dispatch_tableN)r   r   r   r   r   r\   ra   r!   r!   r!   r"   ru   û   s   ru   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¡ ƒ xtdƒD ]}| t|ƒ¡ qnW |||| d|  d ƒ d S )	NZ6P2n3i2n3iPZ3nP0nZPn0Pé   s   xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxé   é    r   )r   Úcalcobjsizerf   r   r$   r%   rO   rq   Ú
__sizeof__r2   ÚcalcsizeÚcheck_sizeofÚsysÚ	getsizeofrM   r   Úchr)r'   Úbasesizer=   ZMT_sizeZME_sizerT   Úir!   r!   r"   Útest_pickler  s    


zSizeofTests.test_picklerc                s–  t  d¡}tj‰t d¡‰ t d¡‰| j‰xhdD ]`}xZdD ]R}ˆt ¡ ||d}|  	t
 |¡|¡ ˆ||dˆ   t|ƒ d t|ƒ d ƒ q:W q0W |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 2P3n6P2n2iÚPÚn)ÚASCIIzUTF-16zlatin-1)ÚstrictÚreplace)ÚencodingÚerrorsry   rJ   r†   r‡   c                sD   t  | ¡}ˆt |¡ddd}| ¡  ˆ|ˆ|ˆ   |ˆ  ƒ d S )Nr†   r‡   )r‰   rŠ   )r   r   r$   r%   r   )ÚdataZ	memo_sizeZ
marks_sizer   r+   )r„   rT   r…   Ústdsizer&   r!   r"   Úcheck_unpickler%  s
    


z3SizeofTests.test_unpickler.<locals>.check_unpicklerr   éd   é   c             S   s   g | ]}t |ƒ‘qS r!   )r€   )Ú.0r‚   r!   r!   r"   ú
<listcomp>0  s    z.SizeofTests.test_unpickler.<locals>.<listcomp>é€   c             S   s"   d}xt | ƒD ]}||g}qW |S )Nr   )rM   )Údeepr‹   r‚   r!   r!   r"   Úrecurse1  s    z+SizeofTests.test_unpickler.<locals>.recurseé:   é2   é@   é†   Úaé   )r   rz   rf   r    r2   r|   r}   r$   r%   rO   rq   r{   ÚlenrM   r   r   r   )r'   r   r‰   rŠ   r+   r   r”   r!   )r„   rT   r…   rŒ   r&   r"   Útest_unpickler  s6    





.
zSizeofTests.test_unpicklerN)r   r   r   r   r}   rƒ   rœ   r!   r!   r!   r"   rv      s   rv   )Ú_elementtreezxml.etree.ElementTree)ÚcPickler   )ÚStringIOr$   )Ú	cStringIOr$   )Ú__builtin__Ú
basestringÚbuiltinsÚstr)Ú
exceptionsÚStandardErrorr£   Ú	Exception)ÚUserDictr¨   rc   r¨   )ÚsocketÚ_socketobjectr©   Ú
SocketTypec             C   s6   | |ft krt | |f \} }n| tkr.t|  } | |fS )N)r   r   )ÚmoduleÚnamer!   r!   r"   ÚmappingP  s
    r®   c             C   s6   | |ft krt | |f \} }n| tkr.t|  } | |fS )N)r   r   )r¬   r­   r!   r!   r"   Úreverse_mappingW  s
    r¯   c             C   s¤   y
t j|  S  tk
rž   yt| ƒ W nl tk
rb } ztjrNtd| |f ƒ t‚W d d }~X Y n2 tk
r’ } ztjr€t|ƒ ‚ W d d }~X Y nX t j|  S X d S )NzCan't import module %r: %s)	r~   ÚmodulesÚKeyErrorÚ
__import__r0   r   ÚverboseÚprintr4   )r¬   Úexcr!   r!   r"   Ú	getmodule^  s    
r¶   c             C   s*   t | ƒ}x| d¡D ]}t||ƒ}qW |S )NÚ.)r¶   ÚsplitÚgetattr)r¬   r­   rC   r…   r!   r!   r"   Úgetattributen  s    rº   c             c   s>   x8t | ƒD ],}t| |ƒ}t|tƒr
t|tƒr
||fV  q
W d S )N)Údirr¹   Ú
isinstanceÚtypeÚ
issubclassÚBaseException)Úmodr­   Úattrr!   r!   r"   Úget_exceptionst  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   st   t t ¡ ƒ}|t tƒO }|dd„ tD ƒO }|dd„ t ¡ D ƒO }x.|D ]&}yt|ƒ W qF tk
rj   Y qFX qFW d S )Nc             S   s   h | ]\}}|’qS r!   r!   )r   r¬   r­   r!   r!   r"   ú	<setcomp>~  s    z0CompatPickleTests.test_import.<locals>.<setcomp>c             S   s   h | ]\}}|’qS r!   r!   )r   r¬   r­   r!   r!   r"   rÄ     s    )Úsetr   Úvaluesr   r   r   r¶   r4   )r'   r°   r¬   r!   r!   r"   Útest_import{  s    
zCompatPickleTests.test_importc          
   C   s‚   x|t  ¡ D ]p\}}|  ||f¡T yt|ƒ W n tk
rB   Y nX |d d… dkrp|  |t¡ |  t| |¡ W d Q R X q
W d S )NrJ   Ú_)r   ÚitemsÚsubTestr¶   r4   ÚassertInr   rO   )r'   Úmodule3Úmodule2r!   r!   r"   Útest_import_mapping†  s    z%CompatPickleTests.test_import_mappingc          
   C   sü   xöt  ¡ D ]ê\\}}\}}|  ||f||ff¡¾ ||fdkrZt||ƒ}|  t|tƒ¡ n||fdkr‚t||ƒ}|  t|tƒ¡ nht||ƒ\}}|d d… dkr´|  	||f||f¡ yt||ƒ}W n tk
rÖ   Y nX |  	t||ƒ|¡ W d Q R X q
W d S )N)r¥   ÚOSError)r¥   r4   rJ   rÈ   )
r   rÉ   rÊ   rº   Ú
assertTruer¾   rÏ   r4   r®   rO   )r'   rÌ   Úname3rÍ   Úname2rÁ   r¬   r­   r!   r!   r"   Útest_name_mapping‘  s     

z#CompatPickleTests.test_name_mappingc       	      C   sô   xît  ¡ D ]â\}}|  ||f¡Æ yt|ƒ W n0 tk
r^ } ztjrNt|ƒ W d d }~X Y nX ||ftkr¾t	 
|d ¡|kr¾x@t ¡ D ]"\\}}\}}||f||fkr†P q†W |  d||f ¡ t	 
||¡}t  
||¡}|  ||¡ W d Q R X q
W d S )Nz No reverse mapping from %r to %r)r   rÉ   rÊ   r¶   r4   r   r³   r´   ÚALT_IMPORT_MAPPINGr   Úgetr   ÚfailrO   )	r'   rÍ   rÌ   rµ   Zm3Zn3Úm2Zn2r¬   r!   r!   r"   Útest_reverse_import_mapping¥  s"    z-CompatPickleTests.test_reverse_import_mappingc          
   C   s¼   x¶t  ¡ D ]ª\\}}\}}|  ||f||ff¡~ yt||ƒ}W n tk
rT   Y nX t||ƒ\}}||||ftkrˆ|  ||f||f¡ t||ƒ\}}|  ||f||f¡ W d Q R X q
W d S )N)	r   rÉ   rÊ   rº   r4   r¯   ÚALT_NAME_MAPPINGrO   r®   )r'   rÍ   rÒ   rÌ   rÑ   rÁ   r¬   r­   r!   r!   r"   Útest_reverse_name_mapping¹  s    z+CompatPickleTests.test_reverse_name_mappingc          
   C   s*  |   tddƒd¡ |   tddƒd¡ |   tddƒd¡ |   tddƒd¡ |   tddƒd	¡ xÊttƒD ]¾\}}|  |¡¦ |tttt	fkrŠwd|t
k	r°t|t
ƒr°|   td|ƒd	¡ nh|tk	rìt|tƒrì|   td|ƒd
¡ |   td|ƒd|f¡ n,|   td|ƒd|f¡ |   td|ƒd|f¡ W d Q R X qdW d S )Nr¥   r¦   )r£   r§   r§   r£   )r¥   r§   rÏ   )r£   rÏ   )r¥   rÏ   )r¥   r4   )rO   r®   r¯   rÂ   r£   rÊ   ÚBlockingIOErrorÚResourceWarningÚStopAsyncIterationÚRecursionErrorrÏ   r¾   r4   )r'   r­   rµ   r!   r!   r"   Útest_exceptionsÆ  s:    
z!CompatPickleTests.test_exceptionsc          
   C   sf   t  d¡}xVt|ƒD ]J\}}|  |¡2 |  td|ƒd|f¡ |  td|ƒd|f¡ W d Q R X qW d S )Nzmultiprocessing.contextÚmultiprocessing)r   Úimport_modulerÂ   rÊ   rO   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Ã   z  s   !rÃ   c              C   sT   t tttttttg} tr<|  	t
ttttttttttttg¡ tj| Ž  t t¡ d S )N)r   r#   r6   rH   rI   r^   rb   rÃ   Úhas_c_implementationÚextendre   rg   rh   ri   rj   rk   rl   r[   rm   rt   ru   r>   rv   r   Úrun_unittestÚrun_doctestr   )Útestsr!   r!   r"   Ú	test_mainñ  s    


rè   Ú__main__)=Ú_compat_pickler   r   r   r   r£   r   r$   rc   r2   r~   rP   ÚunittestÚtestr   Ztest.pickletesterr   r   r	   r
   r   r   r   r   rf   rã   r4   r   r#   r6   r>   rq   r@   rH   rI   r[   r^   rb   re   rg   rh   ri   rj   rk   rl   rm   rt   ru   rZ   ÚTestCaserv   rÔ   rÙ   r®   r¯   r¶   rº   rÂ   rÃ   rè   r   r!   r!   r!   r"   Ú<module>   s‚   
	B
Bw
