o
    $i$                     @   s  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!e"Z#dd Z$edd Z%ede&fddZ'de&de(fddZ)ede
e&ee	f de(fddZ*ed>de&de
ee	f de(fd d!Z+d"d# Z,ede&d	efd$d%Z-d&d' Z.ede&d(efd)d*Z/d+d, Z0ede&de(fd-d.Z1ede&defd/d0Z2d1d2 Z3d3d4 Z4d5e&d6e&d7e&fd8d9Z5G d:d; d;Z6e6 Z7ej8j9j:;e7j< G d<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                 C      t t| S N)_global_registrycontainsTRAINABLE_CLASStrainable_name r   N/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/tune/registry.py_has_trainable(   s   r    c                 C   s   t |  tt| S r   )validate_trainabler   getr   r   r   r   r   get_trainable_cls,   s   r#   r   c                 C   s&   t | st| std|  d S d S )NzUnknown trainable: )r    _has_rllib_trainabler   r   r   r   r   r!   2   s   r!   returnc              	   C   s8   zddl m} W n ttfy   Y dS w |  t| S )Nr   )_register_allF)	ray.rllibr&   ImportErrorModuleNotFoundErrorr    )r   r&   r   r   r   r$   8   s   r$   	trainablec                 C   s^   ddl m} t| trt| } t| tot| |}|p.t| t o.t| 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.trainabler+   
isinstancestrr#   type
issubclassr   r   callable)r*   r+   is_wrapped_funcr   r   r   is_function_trainableC   s   

r3   Tnamewarnc                 C   s   ddl m}m} t|trtd n!t|tst|tr'td ||}nt	|r4t
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)r,   r6   r7   r-   r/   loggerdebugr   r   r1   infor0   	TypeErrorr   registerr   )r4   r*   r5   r6   r7   r   r   r   register_trainableZ   s   





r=   c                   C      t t d S r   )r   unregister_allr   r   r   r   r   _unregister_trainablesx      r@   c                 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)r1   r;   r   r<   ENV_CREATOR)r4   r   r   r   r   register_env|   s   
rE   c                   C   r>   r   )r   r?   rD   r   r   r   r   _unregister_envs   rA   rF   input_creatorc                 C   rB   )zRegister a custom input api for RLlib.

    Args:
        name: Name to register.
        input_creator: Callable that creates an
            input reader.
    rC   N)r1   r;   r   r<   RLLIB_INPUT)r4   rG   r   r   r   register_input   s   	
rI   c                   C   r>   r   )r   r?   rH   r   r   r   r   _unregister_inputs   rA   rJ   c                 C   r   r   )r   r   rH   r4   r   r   r   registry_contains_input      rL   c                 C   r   r   )r   r"   rH   rK   r   r   r   registry_get_input   rM   rN   c                   C   s   t   t  t  d S r   )rJ   rF   r@   r   r   r   r   _unregister_all   s   
rO   c                 C   s   t t| | d S r   )r   r<   TEST)keyvaluer   r   r   _check_serializability   s   rS   prefixcategoryrQ   c                 C   s*   d|  d d | d d | d 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)rT   rU   rQ   r   r   r   	_make_key   s   rZ   c                   @   sp   e Zd Zddee fddZedd Zdd Zd	d
 Z	dd Z
ddee fddZdd Zdd Zdd ZdS )	_RegistryNrT   c                 C   s   i | _ || _t | _d| _dS )z2If no prefix is given, use runtime context job ID.FN)	_to_flush_prefixset_registered_atexit_handler_registered)selfrT   r   r   r   __init__   s   
z_Registry.__init__c                 C   s   | j s
t  | _ | j S r   )r]   rayget_runtime_context
get_job_idra   r   r   r   rT      s   z_Registry.prefixc                 C   s4   | j rd S tjjjjtjkrd S tt	 d| _ d S )NT)
r`   rc   _privateworkerglobal_workermodeSCRIPT_MODEatexitr<   rO   rf   r   r   r   _register_atexit   s   

z_Registry._register_atexitc                 C   sN   |t vrddlm} |d|t t|| 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_debugr\   r
   flush_values)ra   rU   rQ   rR   r   r   r   r   r<      s   
z_Registry.registerc                 C   s2   t  rtt| j|| d S | j||fd  d S r   )r
   r   rZ   rT   r\   pop)ra   rU   rQ   r   r   r   
unregister   s   z_Registry.unregisterrU   c                 C   sH   t  }| jD ]\}}|r||kr| || q|||f q|| _d S r   )r^   r_   ru   add)ra   rU   	remainingcatrQ   r   r   r   r?     s   
z_Registry.unregister_allc                 C   s.   t  rtt| j||}|d uS ||f| jv S r   )r
   r	   rZ   rT   r\   ra   rU   rQ   rR   r   r   r   r   
  s   z_Registry.containsc                 C   sN   t  rtt| j||}|d u rtd||t|S t| j||f S )Nz'Registry value for {}/{} doesn't exist.)	r
   r	   rZ   rT   
ValueErrorrp   rq   loadsr\   ry   r   r   r   r"     s   

z_Registry.getc                 C   sV   |    | j D ]\\}}}tt| j|||dd | j||f q	| j  d S )NT)	overwrite)	rm   r\   itemsr   rZ   rT   r_   rv   clearry   r   r   r   rs     s   z_Registry.flush_valuesr   )__name__
__module____qualname__r   r.   rb   propertyrT   rm   r<   ru   r?   r   r"   rs   r   r   r   r   r[      s    
	r[   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
_ParameterRegistryc                 C   s   i | _ i | _d S r   )to_flush
referencesrf   r   r   r   rb   +  s   
z_ParameterRegistry.__init__c                 C   s"   || j |< t r|   d S d S r   )r   rc   is_initializedflushra   kvr   r   r   put/  s   
z_ParameterRegistry.putc                 C   s"   t  s	| j| S t | j| S r   )rc   r   r   r"   r   )ra   r   r   r   r   r"   4  s   
z_ParameterRegistry.getc                 C   sJ   | j  D ]\}}t|tjr|| j|< qt|| j|< q| j   d S r   )r   r}   r-   rc   	ObjectRefr   r   r~   r   r   r   r   r   9  s
   z_ParameterRegistry.flushN)r   r   r   rb   r   r"   r   r   r   r   r   r   *  s
    r   )T)>rl   logging	functoolsr   typesr   typingr   r   r   r   rc   ray.cloudpicklecloudpicklerq   ray.experimental.internal_kvr   r	   r
   r   ray.tune.errorr   ray.util.annotationsr   r   rD   RLLIB_MODELRLLIB_PREPROCESSORRLLIB_ACTION_DISTrH   RLLIB_CONNECTORrP   rn   	getLoggerr   r8   r    r#   r.   r!   boolr$   r3   r=   r@   rE   rF   rI   rJ   rL   rN   rO   rS   rZ   r[   r   rg   rh   _post_init_hooksappendrs   r   r   r   r   r   <module>   sp    

"Z