a
    ¤þdÆ  ã                   @   s^   d dl Z d dlZd dlmZ d dl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 to
    serialize objectsc                 C   s
   || _ d S ©N)Úconn)Úselfr   © r   úd/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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   s0   d| j v rt| j|ƒS td t| ƒjd¡ƒ‚d S )Nr   z!'{}' object has no attribute '{}')Ú__dict__Úgetattrr   ÚAttributeErrorÚformatÚ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                       s   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       s   r    c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú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)   (   s   r)   )
r
   Zmultiprocessing.queuesÚmultiprocessingZmultiprocessing.reductionr   r   r   Zqueuesr    r)   r   r   r   r   Ú<module>   s   
