o
    ci                     @   s   d dl Z d dlmZ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lmZ d dlmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ d dlmZ erZd dlmZ G dd deZdS )    N)AnyCallableDictListOptionalTYPE_CHECKING)DataIterator)DEFAULT_MODULE_ID)MultiRLModuleSpec)INPUT_ENV_SPACES)OfflineData)OfflineEvaluationRunner)OfflinePolicyEvaluationRunnerOfflinePolicyPreEvaluator)OfflinePreLearner)override)RunnerGroup)AlgorithmConfigc                       sh  e Zd Z								d'dddee dee d	ee d
ededeeeef  deeef dee	 deeef ddf fddZ
eedddddddded dedee deeef dee	 deeeef  deeef ddf fddZedd ZedefddZedefddZedefddZedd  Zed!d" Zed#d$ Zed%d& Z  ZS )(OfflineEvaluationRunnerGroupFNr   Tconfigr   local_runnerlogdirtune_trial_id	pg_offset_setupspacesmodule_statemodule_speckwargsreturnc
                    s"   t  j||||||||	|d	 d S )N)	r   r   r   r   r   r   r   r   r   )super__init__)selfr   r   r   r   r   r   r   r   r   r   	__class__ e/home/ubuntu/.local/lib/python3.10/site-packages/ray/rllib/offline/offline_evaluation_runner_group.pyr!      s   
z%OfflineEvaluationRunnerGroup.__init__)r   num_runnersr   r   r   r   r'   c          	   	      sV  |j p|jdkr
tnt| _| jjp|jdkrtnt| _	d| j_
| j	| j_d| j_
|dkr6|r6td|dt j|||d|||d t|d| _|pRt|j|jfi}|| j_|pf| jjt|t i| jjd	}|| j_| jdkr| d
d }| jd ur|dt   || j_| j j!| jj"d||d| _#| jd|dd | j#D d | $  d S )N	eval_lossFTr   z:Cannot run `OfflineEvaluationRunnerGroup with num_runners=zI and a local runner. Either use no remote runners or only remote runners.)r   r'   r   validater   r   r   )r   )r   inference_onlyc                 S   s   t   S N)rayget_runtime_contextget_node_id)_r%   r%   r&   <lambda>w   s    z5OfflineEvaluationRunnerGroup._setup.<locals>.<lambda>)num_samplesreturn_iterator
num_shardsr   set_dataset_iteratorc                 S   s   g | ]}d |iqS )iteratorr%   ).0r5   r%   r%   r&   
<listcomp>   s    z7OfflineEvaluationRunnerGroup._setup.<locals>.<listcomp>)funcr   r   )%offline_eval_runner_classoffline_evaluation_typer   r   _runner_clsr   prelearner_classr   r   _pre_learner_or_evaluator_cls
_is_frozen
ValueErrorr    r   r   _offline_datar   observation_spaceaction_spacer   get_multi_rl_module_specr	   %offline_eval_rl_module_inference_onlyr   num_remote_runnersforeach_runnerr   insertr,   r-   r.   locality_hintsoffline_datasample"offline_eval_batch_size_per_runner_offline_data_iteratorsr)   )	r"   r   r'   r   r   r   r   r   runner_node_idsr#   r%   r&   r   4   sr   







z#OfflineEvaluationRunnerGroup._setupc                 C      | j jS )z>Number of seconds to wait for health probe calls to `Runner`s.)r   *offline_eval_runner_health_probe_timeout_sr"   r%   r%   r&   runner_health_probe_timeout_s      z:OfflineEvaluationRunnerGroup.runner_health_probe_timeout_sc                 C      | j S )zClass for each runner.)r;   rP   r%   r%   r&   
runner_cls   s   z'OfflineEvaluationRunnerGroup.runner_clsc                 C   rN   )z)Number of runners to schedule and manage.)r   num_offline_eval_runnersrP   r%   r%   r&   r'      rR   z(OfflineEvaluationRunnerGroup.num_runnersc                 C   rS   r+   )r@   rP   r%   r%   r&   rI      s   z)OfflineEvaluationRunnerGroup.offline_datac                 C   s.   | j j| j j| j j| jjr| jjdS ddS )z!Remote arguments for each runner.r   )num_cpusnum_gpus	resourcesmax_restarts)_remote_config num_cpus_per_offline_eval_runner num_gpus_per_offline_eval_runner(custom_resources_per_offline_eval_runnerr   #restart_failed_offline_eval_runners$max_num_offline_eval_runner_restartsrP   r%   r%   r&   _remote_args   s   z)OfflineEvaluationRunnerGroup._remote_argsc                 C   s   | j jp| j jS )z'If errors in runners should be ignored.)r   #ignore_offline_eval_runner_failuresr^   rP   r%   r%   r&   _ignore_ray_errors_on_runners   s   z:OfflineEvaluationRunnerGroup._ignore_ray_errors_on_runnersc                 C   rN   )z&Maximum requests in flight per runner.)r   .max_requests_in_flight_per_offline_eval_runnerrP   r%   r%   r&   "_max_requests_in_flight_per_runner   rR   z?OfflineEvaluationRunnerGroup._max_requests_in_flight_per_runnerc                 C   rN   )z.If runners should validated after constructed.)r   0validate_offline_eval_runners_after_constructionrP   r%   r%   r&   $_validate_runners_after_construction   rR   zAOfflineEvaluationRunnerGroup._validate_runners_after_construction)FNNr   TNNN)__name__
__module____qualname__r   boolstrintr   r   r
   r!   r   r   r   propertyrQ   r   rT   r'   r   rI   r`   rb   rd   rf   __classcell__r%   r%   r#   r&   r      s    
	



	
Y



r   ) r,   typingr   r   r   r   r   r   ray.data.iteratorr   ray.rllib.corer	   (ray.rllib.core.rl_module.multi_rl_moduler
   ray.rllib.envr   ray.rllib.offline.offline_datar   +ray.rllib.offline.offline_evaluation_runnerr   2ray.rllib.offline.offline_policy_evaluation_runnerr   r   $ray.rllib.offline.offline_prelearnerr   ray.rllib.utils.annotationsr   $ray.rllib.utils.runners.runner_groupr   %ray.rllib.algorithms.algorithm_configr   r   r%   r%   r%   r&   <module>   s     