
    &`iG'                     p    d dl Z d dlmZmZmZmZmZmZmZ d dl	m
Z
 erd dlZd dlZda G d d          ZdS )    N)TYPE_CHECKINGAnyDictListSetTupleUnion)DeviceTc            	          e Zd Zd ZdeddfdZdedededdfd	Z	dede
fd
ZdedefdZdeddfdZde
ddfdZede
fd            Zded         deed         ee         f         fdZdddeeeddef         f         fdZdddeedef         def         fdZdeeddef         ef         defdZdedef         dddedefdZdS )_SerializationContextc                 d    d| _         g | _        t                      | _        i | _        i | _        d S )NF)_use_external_transport_out_of_band_tensorsset!_deserialized_tensor_placeholdersintra_process_channel_bufferschannel_id_to_num_readersselfs    /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/experimental/channel/serialization_context.py__init__z_SerializationContext.__init__   s?     .3$ ;=! <?55. >@* :<&&&    devicereturnNc                     || _         d S N)_target_device)r   r   s     r   set_target_devicez'_SerializationContext.set_target_device%   s    $r   
channel_idvaluenum_readersc                     |dk    s
J d            || j         vsJ d| d            || j        vsJ d| d            || j         |<   || j        |<   d S )Nr   z#num_readers must be greater than 0.Channel z already exists in the buffer.z1 already exists in the channel_id_to_num_readers.)r   r   )r   r   r    r!   s       r   set_dataz_SerializationContext.set_data(   s    Q Ed@@@@@j@@@ A@@ d<<<<SjSSS =<< :?*:65@&z222r   c                     || j         v S r   )r   r   r   s     r   has_dataz_SerializationContext.has_data4   s    T???r   c                 ,   || j         v sJ d| d            || j        v sJ d| d            | j        |xx         dz  cc<   | j        |         dk    r4| j                            |           | j                             |          S | j         |         S )Nr#   z does not exist in the buffer.z1 does not exist in the channel_id_to_num_readers.   r   )r   r   popr&   s     r   get_dataz_SerializationContext.get_data7   s    $<<<<@j@@@ =<< $8888SjSSS 988 	&z222a7222)*5::*..z:::599*EEE1*==r   c                 r    | j                             |d            | j                            |d            d S r   )r   r*   r   r&   s     r   
reset_dataz _SerializationContext.reset_dataF   s:    *..z4@@@&**:t<<<<<r   use_external_transportc                     || _         d S r   r   )r   r.   s     r   set_use_external_transportz0_SerializationContext.set_use_external_transportJ   s    '=$$$r   c                     | j         S r   r0   r   s    r   r.   z,_SerializationContext.use_external_transportM   s    ++r   tensorsztorch.Tensorc                 Z    | j         }| j        }|| _         t                      | _        ||fS )z
        Return and reset the out-of-band tensors and all tensor placeholders
        that were deserialized since the last call to reset.
        )r   r   r   )r   r3   prev_tensors deserialized_tensor_placeholderss       r   reset_out_of_band_tensorsz/_SerializationContext.reset_out_of_band_tensorsQ   s5     0+/+Q($+!14.===r   tensorz
np.ndarrayztorch.dtypec                     ddl m} |                                }| j        rH|j        |j        |j        k    r1| j                            |           t          | j                  dz
  S | 	                    |          S )Nr   )ChannelContextr)   )
ray.experimental.channelr:   get_currentr   _torch_devicer   r   appendlenserialize_to_numpy_or_scalar)r   r8   r:   ctxs       r   serialize_tensorz&_SerializationContext.serialize_tensor^   s     	<;;;;;((**' 		6%):fm)K)K %,,V444t011A5500888r   c                 (   ddl }|j        j        }|dk    r|                    d          }|                                dk    r4|                    |j                                                  |j        |fS |	                                |j        |fS )zd
        Serialize a tensor to a numpy array,
        or a scalar when the tensor is 0-dim.
        r   Ncpu)
torchr   typetodimviewuint8numpydtypeitem)r   r8   rE   tensor_device_types       r   r@   z2_SerializationContext.serialize_to_numpy_or_scalarq   s     	#]/ &&YYu%%F ::<<!KK,,2244flDVWWKKMM6<1CDDr   valtarget_devicec                 ^   t          |t                    r{|}| j                            |           |t	          | j                  k     sJ d|d| j        f            | j        |         }|t          j        k    r|                    d          }|S |\  }}}| 	                    ||||          S )Nplaceholderout_of_band_tensorsrD   )

isinstanceintr   addr?   r   r
   CPUrG    deserialize_from_numpy_or_scalar)r   rO   rP   rR   r8   np_arrayrL   rN   s           r   deserialize_tensorz(_SerializationContext.deserialize_tensor   s     c3 	K266{CCCT%>!?!????%)	B??? .{;F
**5))M.1+%+44e/
 
 	
r   rY   rL   rN   c                   	 dd l dd l	|t          j        k    r|n$|t          j        t          j        fv rdn|j        dk    rq	fd}t          rUt          j	                    5  t          j
        dt          d            ||          }d d d            n# 1 swxY w Y   dan ||          }|S t          |j                  s 	j        |	          S  	j        |
                                        S )Nr   cudarD   c                     t          | j                  s j        |           S  j        |                                         }|                              S )Nr   rL   r   )rT   ndarrayr8   
from_numpyrI   rG   )rY   
cpu_tensorrL   nptarget_device_typerE   s     r   convert_numpy_to_tensorzW_SerializationContext.deserialize_from_numpy_or_scalar.<locals>.convert_numpy_to_tensor   sr    !(BJ77 
D'5< );5    "2!1(!;!;!@!@!G!GJ%==0B=CCCr   ignorez%The given NumPy array is not writable)categorymessageFr^   r_   )rK   rE   r
   DEFAULTGPUCUDAr    _TORCH_WARNING_FILTER_ACTIVATEwarningscatch_warningsfilterwarningsUserWarningrT   r`   r8   rI   )
r   rY   rL   rN   rP   re   
gpu_tensorrc   rd   rE   s
     `    @@@r   rX   z6_SerializationContext.deserialize_from_numpy_or_scalar   s    	FN**!3vz6;777!'!.!4 &&D D D D D D D D" . ?,.. C C + !, G   
 "9!8!B!BJC C C C C C C C C C C C C C C 27..44X>>

 (BJ// 	Q5<1C5QQQQ  5<1CDDDII%PPPs   ,(B  B$'B$)__name__
__module____qualname__r   r
   r   strr   rU   r$   boolr'   r+   r-   r1   propertyr.   r   r   r   r7   r	   rB   r@   rZ   rX    r   r   r   r      sr       < < <,% %4 % % % %
A3 
As 
A 
A 
A 
A 
A 
A@3 @4 @ @ @ @>3 >3 > > > >=S =T = = = => >$ > > > > , , , , X,>N+>	tN#SX-	.> > > >9$9	sE,s:;;	<9 9 9 9&E$E	u\3&';	<E E E E<
5}c9:C?@
 
 
 
 
6=Qc)*=Q =Q  	=Q
 =Q =Q =Q =Q =Q =Qr   r   )rm   typingr   r   r   r   r   r   r	   ray.experimental.util.typesr
   rK   rc   rE   rl   r   rx   r   r   <module>r{      s     D D D D D D D D D D D D D D D D D D . . . . . . LLL "& YQ YQ YQ YQ YQ YQ YQ YQ YQ YQr   