
    &`ib              	           d Z ddlZddlmZm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mZ erddlmZ ddlZ G d d	ej                  Z G d
 dej                  Z	 ddededddefdZdddddedddefdZdS )a  Implements the client side of the client/server pickling protocol.

These picklers are aware of the server internals and can find the
references held for the client within the server.

More discussion about the client/server pickling protocol can be found in:

  ray/util/client/client_pickler.py

ServerPickler dumps ray objects from the server into the appropriate stubs.
ClientUnpickler loads stubs from the client and finds their associated handle
in the server instance.
    N)TYPE_CHECKINGAny)disable_client_hook)
PickleStub)ClientReferenceActorClientReferenceFunction)RayletServicerc                   .     e Zd Zdeddf fdZd Z xZS )ServerPickler	client_idserverr	   c                 V     t                      j        |i | || _        || _        d S N)super__init__r   r   )selfr   r   argskwargs	__class__s        y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/util/client/server/server_pickler.pyr   zServerPickler.__init__!   s1    $)&)))"    c                    t          |t          j                  r`|                                }|| j        j        | j                 vr|| j        j        | j                 |<   t          d| j        |d d           S t          |t          j        j	                  r|j
                                        }|| j        j        vr|| j        j        |<   || j        j        | j                 vr*| j        j        | j                                     |           t          d| j        |j
                                        d d           S d S )NObject)typer   ref_idnamebaseline_optionsActor)
isinstanceray	ObjectRefbinaryr   object_refsr   r   actorActorHandle	_actor_id
actor_refsactor_ownersadd)r   objobj_idactor_ids       r   persistent_idzServerPickler.persistent_id&   s;   c3=)) 	ZZ\\FT[4T^DDD CF'7?.!%    SY233 	}++--Ht{55536&x0t{7GGG(8<<XFFF.}++--!%    tr   )__name__
__module____qualname__strr   r-   __classcell__r   s   @r   r   r       s[        # /?      
      r   r   c                   $     e Zd Z fdZd Z xZS )ClientUnpicklerc                 H     t                      j        |i | || _        d S r   )r   r   r   )r   r   r   r   r   s       r   r   zClientUnpickler.__init__F   s*    $)&)))r   c                    t          |t                    sJ |j        dk    rt          S |j        dk    r"| j        j        |j                 |j                 S |j        dk    r| j        j        |j                 S |j        dk    rt          |j        |j                  S |j        dk    r+| j        
                    |j        |j        |j                  S |j        dk    rt          |j        |j                  S |j        dk    r+| j                            |j        |j        |j                  S |j        dk    r,| j        j        |j                 }t          ||j                  S t!          d	          )
NRayr   r   RemoteFuncSelfReference
RemoteFuncRemoteActorSelfReferenceRemoteActorRemoteMethodzUncovered client data type)r   r   r   r    r   r#   r   r   r'   r   lookup_or_register_funcr   r   lookup_or_register_actorgetattrr   NotImplementedError)r   pidr$   s      r   persistent_loadzClientUnpickler.persistent_loadJ   s`   #z*****8uJX!!;*3=9#*EEX  ;)#*55X222*3=#*EEEX%%;66
CM3+?   X333'szBBBX&&;77
CM3+?   X''K*3:6E5#(+++%&BCCCr   )r.   r/   r0   r   rC   r2   r3   s   @r   r5   r5   E   sN            D D D D D D Dr   r5   r*   r   server_instancer	   returnc                     t          j                    5 }t          ||||          }|                    |            |                                cd d d            S # 1 swxY w Y   d S )N)protocol)ioBytesIOr   dumpgetvalue)r*   r   rD   rG   filesps         r   dumps_from_serverrN   e   s     
 9othOOO
}}                 s   <AA!$A!TASCIIstrict)fix_importsencodingerrorsdatac                   t                      5  t          | t                    rt          d          t	          j        |           }t          ||||                                          cd d d            S # 1 swxY w Y   d S )Nz%Can't load pickle from unicode string)rQ   rR   )r   r   r1   	TypeErrorrH   rI   r5   load)rT   rD   rQ   rR   rS   rL   s         r   loads_from_clientrX   n   s     
		  dC   	ECDDDz$T{X
 
 

$&&                 s   AA99A= A=r   )__doc__rH   typingr   r   r    ray.cloudpicklecloudpickleray._private.client_mode_hookr   ray.util.client.client_picklerr   #ray.util.client.server.server_stubsr   r   ray.util.client.server.serverr	   pickleCloudPicklerr   	Unpicklerr5   r1   bytesrN   rX    r   r   <module>rf      s    
			 % % % % % % % % 



 % % % % % % = = = = = = 5 5 5 5 5 5       
  =<<<<<< " " " " "K, " " "JD D D D Df& D D DB KO 	/?
      
% 	     r   