o
    <Æ&iÔ  ã                   @   s^   d dl Z d dlZd dlZd dlmZ G dd„ dƒZG dd„ dejjƒZG dd„ dejj	ƒZ	dS )	é    N)ÚForkingPicklerc                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚConnectionWrapperz_Proxy class for _multiprocessing.Connection which uses ForkingPickler for object serialization.c                 C   s
   || _ d S ©N)Úconn)Úselfr   © r   úFC:\wamp64\www\opt\env\Lib\site-packages\torch/multiprocessing/queue.pyÚ__init__
   s   
zConnectionWrapper.__init__c                 C   s,   t  ¡ }t|tjƒ |¡ |  | ¡ ¡ d S r   )ÚioÚBytesIOr   ÚpickleÚHIGHEST_PROTOCOLÚdumpZ
send_bytesÚgetvalue)r   ÚobjÚbufr   r   r   Úsend   s   zConnectionWrapper.sendc                 C   s   |   ¡ }t |¡S r   )Z
recv_bytesr   Úloads)r   r   r   r   r   Úrecv   s   
zConnectionWrapper.recvc                 C   s,   d| j v rt| j|ƒS tdt| ƒj› dƒ‚)Nr   ú'z ' object has no attribute 'conn')Ú__dict__Úgetattrr   ÚAttributeErrorÚtypeÚ__name__)r   Únamer   r   r   Ú__getattr__   s   
zConnectionWrapper.__getattr__N)r   Ú
__module__Ú__qualname__Ú__doc__r	   r   r   r   r   r   r   r   r      s    r   c                       ó   e Zd Z‡ fdd„Z‡  ZS )ÚQueuec                    sB   t ƒ j|i |¤Ž t| jƒ| _t| jƒ| _| jj| _| jj| _d S r   )	Úsuperr	   r   Ú_readerÚ_writerr   Z_sendr   Z_recv)r   ÚargsÚkwargs©Ú	__class__r   r   r	      s
   
zQueue.__init__)r   r   r   r	   Ú__classcell__r   r   r'   r   r!      ó    r!   c                       r    )ÚSimpleQueuec                    s2   t | jtƒst| jƒ| _t| jƒ| _tƒ  ¡  d S r   )Ú
isinstancer#   r   r$   r"   Ú_make_methods)r   r'   r   r   r-   &   s   zSimpleQueue._make_methods)r   r   r   r-   r)   r   r   r'   r   r+   %   r*   r+   )
r
   Zmultiprocessing.queuesÚmultiprocessingr   Zmultiprocessing.reductionr   r   Úqueuesr!   r+   r   r   r   r   Ú<module>   s    	