o
    $i'                     @   sv   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 e \Z	Z
Ze eZeG dd dZd ad	ddZdS )
    N)OldAPIStack)try_import_tf)log_oncec                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )_TFRunBuilderzUsed to incrementally build up a TensorFlow run.

    This is particularly useful for batching ops from multiple different
    policies in the multi-agent setting.
    c                 C   s"   || _ || _i | _g | _d | _d S N)session
debug_name	feed_dictfetches	_executed)selfr   r    r   [/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/rllib/utils/tf_run_builder.py__init__   s
   
z_TFRunBuilder.__init__c                 C   s<   | j rJ |D ]}|| jv rtd|q| j| d S )NzKey added twice: {})r   r	   
ValueErrorformatupdate)r   r	   kr   r   r   add_feed_dict   s   

z_TFRunBuilder.add_feed_dictc                 C   s4   | j rJ t| j}| j| tt|t| jS r   )r   lenr
   extendlistrange)r   r
   
base_indexr   r   r   add_fetches#   s   

z_TFRunBuilder.add_fetchesc              
      s    j d u r2zt j j j jtjd _ W n t	y1 } zt
d j j |d }~ww t|tr< j | S t|trJ fdd|D S t|trZt fdd|D S td|)NTF_TIMELINE_DIRz Error fetching: {}, feed_dict={}c                    s   g | ]}  |qS r   get.0xr   r   r   
<listcomp>=   s    z%_TFRunBuilder.get.<locals>.<listcomp>c                 3   s    | ]}  |V  qd S r   r   r   r!   r   r   	<genexpr>?   s    z$_TFRunBuilder.get.<locals>.<genexpr>zUnsupported fetch type: {})r   _run_timeliner   r
   r   r	   osenvironr   	Exceptionlogger	exceptionr   
isinstanceintr   tupler   )r   to_fetcher   r!   r   r   )   s2   






z_TFRunBuilder.getN)__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r      s    r   c              	   C   s  |d u ri }|rxddl m} z
tjtjjd}W n ty,   d }tdr*t	d Y nw t
 }t }| j||||d}	|j|jd}
tj|d|t td	 }td
7 at|d}tdt | tj| ||
  |	S tdrtd | j||d}	|	S )Nr   )timeline)trace_levelztf1.RunOptions_not_availablezCan not access tf.RunOptions.FULL_TRACE. This may be because you have used `ray.init(local_mode=True)`. RLlib will use timeline without `options=tf.RunOptions.FULL_TRACE`.)optionsrun_metadatar	   )
step_statsztimeline-{}-{}-{}.json
      wzWrote tf timeline ({} s) to {}tf_timelinezsExecuting TF run without tracing. To dump TF timeline traces to disk, set the TF_TIMELINE_DIR environment variable.)r	   )tensorflow.python.clientr3   tf1
RunOptionstf
FULL_TRACEAttributeErrorr   r(   r)   RunMetadatatimerunTimeliner7   r%   pathjoinr   getpid_countopeninfoabspathwritegenerate_chrome_trace_format)sessopsr   r	   timeline_dirr3   run_optionsr6   startr
   traceoutf
trace_filer   r   r   r$   G   sN   	
r$   )NN)loggingr%   rC   ray.rllib.utils.annotationsr   ray.rllib.utils.frameworkr   ray.util.debugr   r=   r?   tfv	getLoggerr/   r(   r   rI   r$   r   r   r   r   <module>   s    
6