
    &`i$                        d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlZd dlmZ d dlmZmZmZmZ d dlmZ d dlmZ dZd	Zd
ZdZdZdZdZdZeeeeeeeegZ  ej!        e"          Z#d Z$ed             Z%ede&fd            Z'de&de(fdZ)ede
e&ee	f         de(fd            Z*ed.de&de
ee	f         de(fd            Z+d Z,ede&d	efd            Z-d Z.ede&defd             Z/d! Z0ede&de(fd"            Z1ede&defd#            Z2d$ Z3d% Z4d&e&d'e&d(e&fd)Z5 G d* d+          Z6 e6            Z7ej8        j9        j:        ;                    e7j<                    G d, d-          Z=dS )/    N)partial)FunctionType)CallableOptionalTypeUnion)_internal_kv_del_internal_kv_get_internal_kv_initialized_internal_kv_put	TuneError)DeveloperAPItrainable_classenv_creatorrllib_modelrllib_preprocessorrllib_action_distrllib_inputrllib_connector__test__c                 B    t                               t          |           S N)_global_registrycontainsTRAINABLE_CLASStrainable_names    e/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/tune/registry.py_has_trainabler    (   s    $$_nEEE    c                 `    t          |            t                              t          |           S r   )validate_trainabler   getr   r   s    r   get_trainable_clsr%   ,   s&    ~&&&@@@r!   r   c                 j    t          |           s!t          |           st          d|            d S d S )NzUnknown trainable: )r    _has_rllib_trainabler   r   s    r   r#   r#   2   sS    .)) @2F~2V2V @>n>>???@ @ @ @r!   returnc                 t    	 ddl m} n# t          t          f$ r Y dS w xY w |             t	          |           S )Nr   )_register_allF)	ray.rllibr*   ImportErrorModuleNotFoundErrorr    )r   r*   s     r   r'   r'   8   s_    +++++++,-   uu MOOO.)))s   	 	trainablec                 B   ddl m} t          | t                    rt	          |           } t          | t
                    ot          | |          }|pNt          | t
                     o8t          | t                    p#t          | t                    pt          |           S )zCheck if a given trainable is a function trainable.
    Either the trainable has been wrapped as a FunctionTrainable class already,
    or it's still a FunctionType/partial/callable.r   )FunctionTrainable)
ray.tune.trainabler0   
isinstancestrr%   type
issubclassr   r   callable)r.   r0   is_wrapped_funcs      r   is_function_trainabler8   C   s    
 544444)S!! 1%i00	 D11 j$7 7O  y$''' 	
y,// #)W--#	""r!   Tnamewarnc                     ddl m}m} t          |t                    rt
                              d           nt          |t                    st          |t                    r&t
                              d            ||          }n4t          |          r%t
          
                    d            ||          }t          ||          st          d|          t                              t          | |           dS )a  Register a trainable function or class.

    This enables a class or function to be accessed on every Ray process
    in the cluster.

    Args:
        name: Name to register.
        trainable: Function or tune.Trainable class. Functions must
            take (config, status_reporter) as arguments and will be
            automatically converted into a class during registration.
    r   )	Trainablewrap_functionzDetected class for trainable.z Detected function for trainable.z=Detected unknown callable for trainable. Converting to class.z0Second argument must be convertable to TrainableN)r1   r<   r=   r2   r4   loggerdebugr   r   r6   infor5   	TypeErrorr   registerr   )r9   r.   r:   r<   r=   s        r   register_trainablerC   Z   s     <;;;;;;;)T"" -45555	I|	,	, -
9g0N0N -7888!M),,			)		 -STTT!M),,	i++ WJIVVVotY?????r!   c                  D    t                               t                     d S r   )r   unregister_allr    r!   r   _unregister_trainablesrG   x   s    ##O44444r!   c                     t          |          st          d|          t                              t          | |           dS )zRegister a custom environment for use with RLlib.

    This enables the environment to be accessed on every Ray process
    in the cluster.

    Args:
        name: Name to register.
        env_creator: Callable that creates an env.
    !Second argument must be callable.N)r6   rA   r   rB   ENV_CREATOR)r9   r   s     r   register_envrK   |   sD     K   J;[IIIk4=====r!   c                  D    t                               t                     d S r   )r   rE   rJ   rF   r!   r   _unregister_envsrM          ##K00000r!   input_creatorc                     t          |          st          d|          t                              t          | |           dS )zRegister a custom input api for RLlib.

    Args:
        name: Name to register.
        input_creator: Callable that creates an
            input reader.
    rI   N)r6   rA   r   rB   RLLIB_INPUT)r9   rO   s     r   register_inputrR      sD     M"" L;]KKKk4?????r!   c                  D    t                               t                     d S r   )r   rE   rQ   rF   r!   r   _unregister_inputsrT      rN   r!   c                 B    t                               t          |           S r   )r   r   rQ   r9   s    r   registry_contains_inputrW      s    $$[$777r!   c                 B    t                               t          |           S r   )r   r$   rQ   rV   s    r   registry_get_inputrY      s    T222r!   c                  Z    t                       t                       t                       d S r   )rT   rM   rG   rF   r!   r   _unregister_allr[      s,    r!   c                 H    t                               t          | |           d S r   )r   rB   TEST)keyvalues     r   _check_serializabilityr`      s     dC/////r!   prefixcategoryr^   c                     d|                      d          z   dz   |                     d          z   dz   |                     d          z   S )zGenerate a binary key for the given category and key.

    Args:
        prefix: Prefix
        category: The category of the item
        key: The unique identifier for the item

    Returns:
        The key to use for storing a the value.
    s   TuneRegistry:ascii   :   /)encode)ra   rb   r^   s      r   	_make_keyrh      s^     	
--
 
 	!
	 //'
"
"	# 		
 **W

	r!   c                   |    e Zd Zddee         fdZed             Zd Zd Z	d Z
ddee         fd	Zd
 Zd Zd ZdS )	_RegistryNra   c                 V    i | _         || _        t                      | _        d| _        dS )z2If no prefix is given, use runtime context job ID.FN)	_to_flush_prefixset_registered_atexit_handler_registered)selfra   s     r   __init__z_Registry.__init__   s*    55*/'''r!   c                 r    | j         s*t          j                                                    | _         | j         S r   )rm   rayget_runtime_context
get_job_idrq   s    r   ra   z_Registry.prefix   s1    | 	B244??AADL|r!   c                     | j         rd S t          j        j        j        j        t          j        k    rd S t          j        t                     d| _         d S )NT)
rp   rt   _privateworkerglobal_workermodeSCRIPT_MODEatexitrB   r[   rw   s    r   _register_atexitz_Registry._register_atexit   sM    * 	F<,1S_DDF(((*.'''r!   c                     |t           vr*ddlm}  |d                    |t                               t	          j        |          | j        ||f<   t                      r|                                  dS dS )a#  Registers the value with the global registry.

        Args:
            category: The category to register under.
            key: The key to register under.
            value: The value to register.

        Raises:
            PicklingError: If unable to pickle to provided file.
        r   r   z Unknown category {} not among {}N)	KNOWN_CATEGORIESray.tuner   formatpickledumps_debugrl   r   flush_values)rq   rb   r^   r_   r   s        r   rB   z_Registry.register   s     +++******)299(DTUU   +1*<U*C*C#'#%% 	 	  	 r!   c                     t                      r%t          t          | j        ||                     d S | j                            ||fd            d S r   )r   r	   rh   ra   rl   pop)rq   rb   r^   s      r   
unregisterz_Registry.unregister   sT    #%% 	6Yt{HcBBCCCCCN#55555r!   rb   c                     t                      }| j        D ];\  }}|r||k    r|                     ||           $|                    ||f           <|| _        d S r   )rn   ro   r   add)rq   rb   	remainingcatr^   s        r   rE   z_Registry.unregister_all  so    EE	( 	* 	*HC *HOOS))))sCj))))$r!   c                     t                      r't          t          | j        ||                    }|d uS ||f| j        v S r   )r   r
   rh   ra   rl   rq   rb   r^   r_   s       r   r   z_Registry.contains
  sG    #%% 	5$Yt{Hc%J%JKKE$$c?dn44r!   c                    t                      r\t          t          | j        ||                    }|#t	          d                    ||                    t          j        |          S t          j        | j        ||f                   S )Nz'Registry value for {}/{} doesn't exist.)	r   r
   rh   ra   
ValueErrorr   r   loadsrl   r   s       r   r$   z_Registry.get  s    #%% 	A$Yt{Hc%J%JKKE} =DDXsSS   <&&&<# ?@@@r!   c                 (   |                                   | j                                        D ]J\  \  }}}t          t	          | j        ||          |d           | j                            ||f           K| j                                         d S )NT)	overwrite)	r   rl   itemsr   rh   ra   ro   r   clearr   s       r   r   z_Registry.flush_values  s    &*n&:&:&<&< 	2 	2"OXsU$+x55u      (C1111r!   r   )__name__
__module____qualname__r   r3   rr   propertyra   r   rB   r   rE   r   r$   r   rF   r!   r   rj   rj      s        0 0x} 0 0 0 0   X

/ 
/ 
/     *6 6 6% %x} % % % %5 5 5	A 	A 	A    r!   rj   c                   &    e Zd Zd Zd Zd Zd ZdS )_ParameterRegistryc                 "    i | _         i | _        d S r   )to_flush
referencesrw   s    r   rr   z_ParameterRegistry.__init__+  s    r!   c                 l    || j         |<   t          j                    r|                                  d S d S r   )r   rt   is_initializedflushrq   kvs      r   putz_ParameterRegistry.put/  s:    a 	JJLLLLL	 	r!   c                     t          j                    s| j        |         S t          j        | j        |                   S r   )rt   r   r   r$   r   )rq   r   s     r   r$   z_ParameterRegistry.get4  s7    !## 	$=##wtq)***r!   c                     | j                                         D ]F\  }}t          |t          j                  r|| j        |<   *t          j        |          | j        |<   G| j                                          d S r   )r   r   r2   rt   	ObjectRefr   r   r   r   s      r   r   z_ParameterRegistry.flush9  sw    M'')) 	0 	0DAq!S]++ 0%&""%(WQZZ""r!   N)r   r   r   rr   r   r$   r   rF   r!   r   r   r   *  sP            
+ + +
    r!   r   )T)>r~   logging	functoolsr   typesr   typingr   r   r   r   rt   ray.cloudpicklecloudpickler   ray.experimental.internal_kvr	   r
   r   r   ray.tune.errorr   ray.util.annotationsr   r   rJ   RLLIB_MODELRLLIB_PREPROCESSORRLLIB_ACTION_DISTrQ   RLLIB_CONNECTORr]   r   	getLoggerr   r>   r    r%   r3   r#   boolr'   r8   rC   rG   rK   rM   rR   rT   rW   rY   r[   r`   rh   rj   r   ry   rz   _post_init_hooksappendr   r   rF   r!   r   <module>r      s                  2 2 2 2 2 2 2 2 2 2 2 2 



                        % $ $ $ $ $ - - - - - -#) ' #	  
	8	$	$F F F A A A
 @s @ @ @ @
* * * * * * U3$+>%? D    , @ @S @U8T>-B @$ @ @ @ @:5 5 5 >s > > > > > 1 1 1 
@ 
@X 
@ 
@ 
@ 
@1 1 1 8# 8$ 8 8 8 8 3S 3X 3 3 3 3  0 0 0c S s    *W W W W W W W Wt 9;;    $ + +,<,I J J J         r!   