
    &`i5                        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mZm	Z	m
Z
mZm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	Zed
efd            Zdej        defdZ dedej        fdZ!edej"        j#        defd            Z$edej"        j#        defd            Z%ededej"        j#        fd            Z&ededej"        j#        fd            Z'ede
e         deeef         fd            Z(edeeef         defd            Z)e	 d deeef         de*de	eeef                  fd            Z+dS )!    N)OrderedDict)AnyDictOptionalSequenceTypeUnion)DeveloperAPI)NotSerializable)FlexDict)RepeatedSimplex__not_serializable__objc                     t          | t                    rd |                                 D             S t          | t                    rt          d | D                       S t          | t                    rd | D             S t          | t
          j                  rt          |           S t          | t
          j                  rt          |           S t          | t
          j
                  rt          |           S t          | t
          j                  rt          |           S t          | t
          j                  r=|                                 }t!          |          D ]\  }}t#          |          ||<   |S | S )zConvert an object that is a numpy type to a python type.

    If the object is not a numpy type, it is returned unchanged.

    Args:
        obj: The object to convert.
    c                 4    i | ]\  }}|t          |          S  "convert_numpy_to_python_primitives).0keyvals      q/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/rllib/utils/serialization.py
<dictcomp>z6convert_numpy_to_python_primitives.<locals>.<dictcomp>   s4     
 
 
=ES#C3C88
 
 
    c              3   4   K   | ]}t          |          V  d S )Nr   r   r   s     r   	<genexpr>z5convert_numpy_to_python_primitives.<locals>.<genexpr>#   s+      LL7<<LLLLLLr   c                 ,    g | ]}t          |          S r   r   r   s     r   
<listcomp>z6convert_numpy_to_python_primitives.<locals>.<listcomp>%   s!    GGGC2377GGGr   )
isinstancedictitemstuplelistnpintegerintfloatingfloatbool_boolstr_strndarraytolist	enumerater   )r   retivs       r   r   r      sk    #t 
 
IL
 
 
 	
 
C		 LLLLLLLL	C		 GG3GGGG	C	$	$ 3xx	C	%	% Szz	C	"	" 
Cyy	C	!	! 3xx	C	$	$ jjllcNN 	; 	;DAq7::CFF

r   arrayreturnc                     t          j                    }t          j        ||            t	          j        t          j        |                                                    	                    d          S )zPack numpy ndarray into Base64 encoded strings for serialization.

    This function uses numpy.save() instead of pickling to ensure
    compatibility.

    Args:
        array: numpy ndarray.

    Returns:
        b64 escaped string.
    ascii)
ioBytesIOr'   savebase64	b64encodezlibcompressgetvaluedecode)r6   bufs     r   _serialize_ndarrayrD   7   sR     *,,CGCDM#,,..99::AA'JJJr   
b64_stringc           	          t          j        t          j        t	          j        t          j        |                               d          S )zUnpack b64 escaped string into numpy ndarray.

    This function assumes the unescaped bytes are of npy format.

    Args:
        b64_string: Base64 escaped string.

    Returns:
        numpy ndarray.
    T)allow_pickle)r'   loadr:   r;   r?   
decompressr=   	b64decode)rE   s    r   _deserialize_ndarrayrK   H   sB     7

4?6#3J#?#?@@AAPT   r   spacec                 &   | dS dt           j        j        dt          fd}dt           j        j        dt          fd}dt           j        j        dt          fd}dt           j        j        dt          fd}dt           j        j        dt          fd}dt           j        j        dt          fd	}dt          dt          fd
}dt          dt          fd}dt          dt          fd}	dddt          fd}
t          | t           j        j                  r ||           S t          | t           j        j                  r ||           S t          | t           j        j                  r ||           S t          | t           j        j                  r ||           S t          | t           j        j                  r ||           S t          | t           j        j                  r ||           S t          | t           j        j                  r |
|           S t          | t                    r ||           S t          | t                    r ||           S t          | t                    r |	|           S t          dt          |                     )zSerialize a gym Space into a JSON-serializable dict.

    Args:
        space: gym.spaces.Space

    Returns:
        Serialized JSON string.
    Nspr7   c                 x    dt          | j                  t          | j                  | j        | j        j        dS )Nbox)rL   lowhighshapedtype)rD   rQ   rR   _shaperT   r/   rN   s    r   _boxzgym_space_to_dict.<locals>._boxe   s:    %bf--&rw//YX\
 
 	
r   c                     dt          | j                  d}t          | d          rt          | j                  |d<   |S )NdiscreterL   nstart)r)   r[   hasattrr\   )rN   ds     r   	_discretez$gym_space_to_dict.<locals>._discreten   sF    RT
 

 2w 	'RXAgJr   c                     d| j         dS )Nmulti-binaryrZ   )r[   rV   s    r   _multi_binaryz(gym_space_to_dict.<locals>._multi_binaryx   s    #
 
 	
r   c                 F    dt          | j                  | j        j        dS )Nmulti-discrete)rL   nvecrT   )rD   re   rT   r/   rV   s    r   _multi_discretez*gym_space_to_dict.<locals>._multi_discrete~   s(    %&rw//X\
 
 	
r   c                 *    dd | j         D             dS )Nr%   c                 ,    g | ]}t          |          S r   gym_space_to_dictr   rN   s     r   r!   z5gym_space_to_dict.<locals>._tuple.<locals>.<listcomp>   s!    AAA(,,AAAr   rL   spacesrm   rV   s    r   _tuplez!gym_space_to_dict.<locals>._tuple   s'    AAryAAA
 
 	
r   c                 N    dd | j                                         D             dS )Nr#   c                 4    i | ]\  }}|t          |          S r   ri   r   krN   s      r   r   z4gym_space_to_dict.<locals>._dict.<locals>.<dictcomp>   s'    OOOEArq+B//OOOr   rl   )rm   r$   rV   s    r   _dictz gym_space_to_dict.<locals>._dict   s1    OORY__=N=NOOO
 
 	
r   c                 8    d| j         | j        | j        j        dS )Nsimplex)rL   rS   concentrationrT   )rU   rw   rT   r/   rV   s    r   _simplexz#gym_space_to_dict.<locals>._simplex   s&    Y-X\	
 
 	
r   c                 <    dt          | j                  | j        dS )Nrepeated)rL   child_spacemax_len)rj   r{   r|   rV   s    r   	_repeatedz$gym_space_to_dict.<locals>._repeated   s&    ,R^<<z
 
 	
r   c                 L    ddi}| j         D ]\  }}t          |          ||<   |S )NrL   	flex_dict)rm   rj   )rN   r^   rs   ss       r   
_flex_dictz%gym_space_to_dict.<locals>._flex_dict   s=    [
 I 	( 	(DAq$Q''AaDDr   gym.spaces.Textc                     t          | dd           }|t          | dd           }|t          d          d| j        | j        |dS )Ncharacter_setcharsetz9Text space must have a character_set or charset attributetext)rL   
min_length
max_lengthr   )getattr
ValueErrorr   r   )rN   r   s     r   _textz gym_space_to_dict.<locals>._text   sd    "ot44?b)T22G?K   --	
 
 	
r   z&Unknown space type for serialization, )gymrm   Boxr   DiscreteMultiBinaryMultiDiscreteTupler   r   r   r"   Textr   type)rL   rW   r_   rb   rf   ro   rt   rx   r}   r   r   s              r   rj   rj   X   s    }t
 
D 
 
 
 
cj) d    
#*0 
T 
 
 
 

CJ4 
 
 
 
 

3:# 
 
 
 
 

#*/ 
d 
 
 
 

W 
 
 
 
 

h 
4 
 
 
 
x D    
# 
 
 
 
 
  %(( PtE{{	E3:.	/	/ Py	E3:1	2	2 P}U###	E3:3	4	4 Pu%%%	E3:+	,	, Pve}}	E3:?	+	+ PuU||	E3:?	+	+ 	PuU||	E7	#	# Px	E8	$	$ Py	E8	$	$ Pz%   A4;;OOOr   c                 h    dt          |           i}d| j        v rt          | j                  |d<   |S NrL   original_space)rj   __dict__space_to_dictr   )rL   r^   s     r   r   r      s=    	#E**+A5>))+E,@AA
Hr   r^   c                    | dS dt           fddt           dt          j        j        ffd}dt           dt          j        j        ffd}dt           dt          j        j        ffd}dt           dt          j        j        ffd}dt           dt          j        j        fd	}dt           dt          j        j        fd
}dt           dt          ffd}dt           dt          fd}dt           dt          fd}	dt           ddffd}
|||||||||	|
d
}| d         }||vrt          d|           ||         |           S )zDe-serialize a dict into gym Space.

    Args:
        str: serialized JSON str.

    Returns:
        De-serialized gym space.
    Nr^   c                 v    |                                  }|d= d|v rt          j        |d                   |d<   |S )z?Common updates to the dict before we use it to construct spacesrL   rT   )copyr'   rT   )r^   r3   s     r   __commonz%gym_space_from_dict.<locals>.__common   s;    ffhhLc>>8CL11CL
r   r7   c                     |                                  }|                    t          | d                   t          | d                   d           t          j        j        di  |          S )NrQ   rR   )rQ   rR   r   )r   updaterK   r   rm   r   r^   r3   r   s     r   rW   z!gym_space_from_dict.<locals>._box   sp    ffhh

+AeH55,QvY77 	
 	
 	
 z~.....r   c                 B    t          j        j        di  |           S Nr   )r   rm   r   r^   r   s    r   r_   z&gym_space_from_dict.<locals>._discrete   s$    z"11XXa[[111r   c                 B    t          j        j        di  |           S r   )r   rm   r   r   s    r   rb   z*gym_space_from_dict.<locals>._multi_binary   s$    z%44444r   c                     |                                  }|                    dt          |d                   i           t          j        j        di  |          S )Nre   r   )r   r   rK   r   rm   r   r   s     r   rf   z,gym_space_from_dict.<locals>._multi_discrete   s`    ffhh

,S[99	
 	
 	

 z'88((3--888r   c                 f    d | d         D             }t           j                            |          S )Nc                 ,    g | ]}t          |          S r   gym_space_from_dictrk   s     r   r!   z7gym_space_from_dict.<locals>._tuple.<locals>.<listcomp>  s!    @@@b%b))@@@r   rm   rn   )r   rm   r   r^   rm   s     r   ro   z#gym_space_from_dict.<locals>._tuple  s2    @@AhK@@@zv...r   c                     t          d | d                                         D                       }t          j                            |          S )Nc                 4    i | ]\  }}|t          |          S r   r   rr   s      r   r   z6gym_space_from_dict.<locals>._dict.<locals>.<dictcomp>  s'    IIIEArQ#B''IIIr   rm   rn   )r   r$   r   rm   r   r   s     r   rt   z"gym_space_from_dict.<locals>._dict
  sL     IIQx[5F5F5H5HIII
 
 zf---r   c                 .    t          di  |           S r   r   r   s    r   rx   z%gym_space_from_dict.<locals>._simplex  s    %%!%%%r   c                 Z    t          | d                   }t          || d                   S )Nr{   r|   )r{   r|   )r   r   )r^   r{   s     r   r}   z&gym_space_from_dict.<locals>._repeated  s+    )!M*:;;K9FFFFr   c                 ^    d |                                  D             }t          |          S )Nc                 @    i | ]\  }}|d k    |t          |          S )rL   r   )r   rs   r   s      r   r   z;gym_space_from_dict.<locals>._flex_dict.<locals>.<dictcomp>!  s,    RRR1Q'\\!(++\\\r   rn   )r$   r   r   s     r   r   z'gym_space_from_dict.<locals>._flex_dict   s.    RR		RRRv&&&&r   r   c                 B    t          j        j        di  |           S r   )r   rm   r   r   s    r   r   z"gym_space_from_dict.<locals>._text$  s#    z--!---r   )
rP   rY   ra   rd   r%   r#   rv   rz   r   r   rL   z)Unknown space type for de-serialization, )r   r   rm   r   r   r   r   r   r   r   r   )r^   rW   r_   rb   rf   ro   rt   rx   r}   r   r   	space_map
space_typer   s                @r   r   r      sF    	ytD    / / / / / / / /2T 2cj1 2 2 2 2 2 25 5#*"8 5 5 5 5 5 594 9CJ$< 9 9 9 9 9 9/$ /3:. / / / /. .#*- . . . .&D &W & & & & & &GT Gh G G G G'd 'x ' ' ' '. .+ . . . . . . %) I 7J""DjQQQ 9Z ###r   c                     t          | d                   }d| v rbd| d         v sJ t          | d         d         t                    rt          | d                   |_        nt	          | d                   |_        |S r   )r   r"   r/   r   space_from_dict)r^   rL   s     r   r   r   ;  s    '
++E1!,-----a()'2C88 	H $7q9I7J#K#KE   $315E3F#G#GE Lr   argskwargsc           
         | D ]P}	 t          j        t          j        |                     *# t          $ r}t	          d| d|           d}~ww xY w|                                D ]V\  }}	 t          j        t          j        |                     -# t          $ r}t	          d| d| d|           d}~ww xY wdS )a  Check if parameters to a function are serializable by ray.

    Args:
        args: arguments to be checked.
        kwargs: keyword arguments to be checked.

    Raises:
        NoteSerializable if either args are kwargs are not serializable
            by ray.
    zVRLModule constructor arguments must be serializable. Found non-serializable argument: z .
Original serialization error: Nz^RLModule constructor arguments must be serializable. Found non-serializable keyword argument: z = )raygetput	TypeErrorr   r$   )r   r   argers   r5   s         r   !check_if_args_kwargs_serializabler   J  s+     
 
		 GCGCLL!!!! 	 	 	!5475 5125 5  	  
 
1		 GCGAJJ 	 	 	!5<=5 5BC5 5125 5  	
 
s,   &-
AAA.&B
B<B77B<type_c                 T    t          | t                    r| S | j        dz   | j        z   S )zConverts a type into its full classpath ([module file] + "." + [class name]).

    Args:
        type_: The type to convert.

    Returns:
        The full classpath of the given type, e.g. "ray.rllib.algorithms.ppo.PPOConfig".
    .)r"   r/   
__module____qualname__)r   s    r   serialize_typer   n  s1     % c!E$666r   Fmoduleerrorc                    t          | t                    r| S t          | t                    r~	 |                     dd          \  }}t	          j        |          } t          | |          S # t          t          t          t          f$ r }|rt          d|  d          |Y d}~nd}~ww xY wt          d|  d          | S )aV  Resolves a class path to a class.
    If the given module is already a class, it is returned as is.
    If the given module is a string, it is imported and the class is returned.

    Args:
        module: The classpath (str) or type to resolve.
        error: Whether to throw a ValueError if `module` could not be resolved into
            a class. If False and `module` is not resolvable, returns None.

    Returns:
        The resolved class or `module` (if `error` is False and no resolution possible).

    Raises:
        ValueError: If `error` is True and `module` cannot be resolved.
    r      z2Could not deserialize the given classpath `module=z` into a valid python class! Make sure you have all necessary pip packages installed and all custom modules are in your `PYTHONPATH` env variable.Nz
`module` (z$ must be type or string (classpath)!)r"   r   r/   rsplit	importlibimport_moduler   ModuleNotFoundErrorImportErrorAttributeErrorr   )r   r   module_path
class_namer   s        r   deserialize_typer     s   ( &$ T	FC	 	  T	&,mmC&;&;#K,[99F6:...#[.*M 	 	 	  1 1 1 1 
     	 RfRRRSSSMs   <A+ +B(B##B()F),r=   r   r:   r?   collectionsr   typingr   r   r   r   r   r	   	gymnasiumr   numpyr'   r   ray.rllib.utils.annotationsr
   ray.rllib.utils.errorr   ray.rllib.utils.spaces.flexdictr   ray.rllib.utils.spaces.repeatedr   ray.rllib.utils.spaces.simplexr   NOT_SERIALIZABLEr   r0   r/   rD   rK   rm   Spacerj   r   r   r   r   r   r-   r   r   r   r   <module>r      s        				  # # # # # # = = = = = = = = = = = = = = = =         



 4 4 4 4 4 4 1 1 1 1 1 1 4 4 4 4 4 4 4 4 4 4 4 4 2 2 2 2 2 2)  C    BKbj KS K K K K"S RZ      tPSZ- tP$ tP tP tP tPn ) d     _$4 _$CJ$4 _$ _$ _$ _$D t 
 0      HSM  4S>        F 7%c	* 7s 7 7 7 7" ,1) )#t))%))eCI) ) ) ) ) )r   