o
    $i                     @   s   d dl mZmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZ 		dddddedeee  d	eee  d
ee deeef ddfddZedd ZdS )    )AnyCallableDictListOptionalRLlibCallback)
force_list)OldAPIStackN)argskwargscallback_namecallbacks_objectscallbacks_functionsr   r   returnc                C   sZ   t |}|D ]}t|| |pdi |pi  qt |}|D ]}||p#di |p'i  qdS )a  Calls an RLlibCallback method or a registered callback callable.

    Args:
        callback_name: The name of the callback method or key, for example:
            "on_episode_start" or "on_train_result".
        callbacks_objects: The RLlibCallback object or list of RLlibCallback objects
            to call the `callback_name` method on (in the order they appear in the
            list).
        callbacks_functions: The callable or list of callables to call
            (in the order they appear in the list).
        args: Call args to pass to the method/callable calls.
        kwargs: Call kwargs to pass to the method/callable calls.
     N)r	   getattr)r   r   r   r   r   callback_objcallback_fnr   r   V/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/rllib/callbacks/utils.pymake_callback   s   r   c                    s   G  fdddt }|S )Nc                       s   e Zd ZdZ fddZd/ddZd/dd	Zd/d
dZd/ddZd/ddZ	d/ddZ
d/ddZd/ddZd/ddZd/ddZd/ddZd/ddZd/ddZd/d d!Zd"d# Zd$d% Z		d/d&d'Zd/d(d)Zd*eddfd+d,Zd/d-d.Z  ZS )0z._make_multi_callbacks.<locals>._MultiCallbacksTc                    s   t    dd D | _d S )Nc                 S   s   g | ]}| qS r   r   ).0callback_classr   r   r   
<listcomp>/   s    zK_make_multi_callbacks.<locals>._MultiCallbacks.__init__.<locals>.<listcomp>)super__init___callback_list)self)	__class__callback_class_listr   r   r   -   s   
z7_make_multi_callbacks.<locals>._MultiCallbacks.__init__r   Nc                 [       | j D ]
}|jdi | qd S Nr   )r   on_algorithm_initr   r   callbackr   r   r   r"   3      
z@_make_multi_callbacks.<locals>._MultiCallbacks.on_algorithm_initc                 [   r    r!   )r   on_workers_recreatedr#   r   r   r   r&   7   r%   zC_make_multi_callbacks.<locals>._MultiCallbacks.on_workers_recreatedc                 [      d S Nr   r   r   r   r   r   on_env_runners_recreated<      zG_make_multi_callbacks.<locals>._MultiCallbacks.on_env_runners_recreatedc                 [   r'   r(   r   r)   r   r   r   !on_offline_eval_runners_recreated?   r+   zP_make_multi_callbacks.<locals>._MultiCallbacks.on_offline_eval_runners_recreatedc                 [   r    r!   )r   on_checkpoint_loadedr#   r   r   r   r-   B   r%   zC_make_multi_callbacks.<locals>._MultiCallbacks.on_checkpoint_loadedc                S   s   | j D ]	}|j||d qd S )N)	policy_idpolicy)r   on_create_policy)r   r.   r/   r$   r   r   r   r0   F   s   
z?_make_multi_callbacks.<locals>._MultiCallbacks.on_create_policyc                 [   r    r!   )r   on_environment_createdr#   r   r   r   r1   J   r%   zE_make_multi_callbacks.<locals>._MultiCallbacks.on_environment_createdc                 [   r    r!   )r   on_sub_environment_createdr#   r   r   r   r2   N   r%   zI_make_multi_callbacks.<locals>._MultiCallbacks.on_sub_environment_createdc                 [   r    r!   )r   on_episode_createdr#   r   r   r   r3   R   r%   zA_make_multi_callbacks.<locals>._MultiCallbacks.on_episode_createdc                 [   r    r!   )r   on_episode_startr#   r   r   r   r4   V   r%   z?_make_multi_callbacks.<locals>._MultiCallbacks.on_episode_startc                 [   r    r!   )r   on_episode_stepr#   r   r   r   r5   Z   r%   z>_make_multi_callbacks.<locals>._MultiCallbacks.on_episode_stepc                 [   r    r!   )r   on_episode_endr#   r   r   r   r6   ^   r%   z=_make_multi_callbacks.<locals>._MultiCallbacks.on_episode_endc                 [   r    r!   )r   on_evaluate_startr#   r   r   r   r7   b   r%   z@_make_multi_callbacks.<locals>._MultiCallbacks.on_evaluate_startc                 [   r    r!   )r   on_evaluate_endr#   r   r   r   r8   f   r%   z>_make_multi_callbacks.<locals>._MultiCallbacks.on_evaluate_endc                 [   r    r!   )r   on_evaluate_offline_startr#   r   r   r   r9   l   r%   zH_make_multi_callbacks.<locals>._MultiCallbacks.on_evaluate_offline_startc                 [   r    r!   )r   on_evaluate_offline_endr#   r   r   r   r:   p   r%   zF_make_multi_callbacks.<locals>._MultiCallbacks.on_evaluate_offline_endc          
      [   s0   | j D ]}	|	jd|||||||d| qd S )N)workerepisodeagent_idr.   policiespostprocessed_batchoriginal_batchesr   )r   on_postprocess_trajectory)
r   r;   r<   r=   r.   r>   r?   r@   r   r$   r   r   r   rA   t   s   
zH_make_multi_callbacks.<locals>._MultiCallbacks.on_postprocess_trajectoryc                 [   r    r!   )r   on_sample_endr#   r   r   r   rB      r%   z<_make_multi_callbacks.<locals>._MultiCallbacks.on_sample_endresultc                [   s(   | j D ]}|jd|||d| qd S )N)r/   train_batchrC   r   )r   on_learn_on_batch)r   r/   rD   rC   r   r$   r   r   r   rE      s   
z@_make_multi_callbacks.<locals>._MultiCallbacks.on_learn_on_batchc                 [   r    r!   )r   on_train_resultr#   r   r   r   rF      r%   z>_make_multi_callbacks.<locals>._MultiCallbacks.on_train_result)r   N)__name__
__module____qualname__IS_CALLBACK_CONTAINERr   r"   r&   r*   r,   r-   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   rA   rB   dictrE   rF   __classcell__r   r   )r   r   _MultiCallbacks*   s:    
















rN   r   )r   rN   r   rM   r   _make_multi_callbacks(   s   rrO   )NN)typingr   r   r   r   r   ray.rllib.callbacks.callbacksr   ray.rllib.utilsr	   ray.rllib.utils.annotationsr
   strr   rO   r   r   r   r   <module>   s0    



 