
    &`i                         d dl Z d dlZd dlmZmZmZ d dl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mZ d dlmZ  e            \  ZZZe G d	 d
e                      ZdS )    N)DictListUnion)deprecation_warning)ModelV2)OldAPIStackoverride)try_import_tf)ModelConfigDict
TensorType)log_oncec            
           e Zd ZdZdej        j        dej        j        dedede	f
 fdZ
dej        fd	Zdee         fd
Zdee         ddfdZ ee          	 ddedeee         ee	ef         f         fd            Z ee          	 ddedeee         ee	ef         f         fd            Zed             Z xZS )	TFModelV2zTF version of ModelV2, which should contain a tf keras Model.

    Note that this class by itself is not a valid model unless you
    implement forward() in a subclass.	obs_spaceaction_spacenum_outputsmodel_confignamec                     t                                          |||||d           g | _        t                                          r	d| _        dS t                                          | _        dS )a  Initializes a TFModelV2 instance.

        Here is an example implementation for a subclass
        ``MyModelClass(TFModelV2)``::

            def __init__(self, *args, **kwargs):
                super(MyModelClass, self).__init__(*args, **kwargs)
                input_layer = tf.keras.layers.Input(...)
                hidden_layer = tf.keras.layers.Dense(...)(input_layer)
                output_layer = tf.keras.layers.Dense(...)(hidden_layer)
                value_layer = tf.keras.layers.Dense(...)(hidden_layer)
                self.base_model = tf.keras.Model(
                    input_layer, [output_layer, value_layer])
        tf)	frameworkN)super__init__var_listtf1executing_eagerlygraphget_default_graph)selfr   r   r   r   r   	__class__s         r/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/rllib/models/tf/tf_modelv2.pyr   zTFModelV2.__init__   ss    , 	|[,PT 	 	
 	
 	

   "" 	1DJJJ..00DJJJ    returnc                 j    | j         r| j                                         S t          j        |           S )z2Returns a contextmanager for the current TF graph.)r   
as_defaultr   contextr   s    r!   r&   zTFModelV2.context:   s0    : 	):((***?4(((r"   c                     g S )zqReturn the list of update ops for this model.

        For example, this should include any BatchNorm update ops. r'   s    r!   
update_opszTFModelV2.update_opsA   s	     	r"   	variablesNc                 z    t          d          rt          dd           | j                            |           dS )z5Register the given list of variables with this model.'deprecated_tfmodelv2_register_variableszTFModelV2.register_variablesF)olderrorN)r   r   r   extend)r   r+   s     r!   register_variableszTFModelV2.register_variablesG   sD    =>> 	Q$B%PPPPY'''''r"   Fas_dictc                    |r3| j         rd | j         D             S |                     d| j                  S | j         rt          | j                   S t          |                     d                                                    S )Nc                     i | ]
}|j         |S r)   )r   .0vs     r!   
<dictcomp>z'TFModelV2.variables.<locals>.<dictcomp>T   s    999a999r"    Tr2   )r   _find_sub_modules__dict__listr+   valuesr   r2   s     r!   r+   zTFModelV2.variablesM   s      	A} A994=9999 --b$-@@@ = 	?&&& t44;;==>>>r"   c                     |r2d |                      d                                          D             S d |                                  D             S )Nc                 (    i | ]\  }}|j         ||S r)   	trainable)r6   kr7   s      r!   r8   z1TFModelV2.trainable_variables.<locals>.<dictcomp>e   s5       A1  r"   Tr:   c                      g | ]}|j         	|S r)   rB   r5   s     r!   
<listcomp>z1TFModelV2.trainable_variables.<locals>.<listcomp>h   s    ;;;aq{;;;;r"   )r+   itemsr?   s     r!   trainable_variableszTFModelV2.trainable_variables`   sg      	 !%!=!=!C!C!E!E    <;4>>++;;;;r"   c                     t          |t          j        j        j                  st          |t          j                  r6i }|j        D ]*}t          j        dd|j	                  } dz   |z   }|||<   +|S t          |t                    r4 fd|                    d                                          D             S t          |t          j                  r |iS t          |t          t          f          r_i }t          |          D ]K\  }}t                               d                    |          z   |          }|                    |           L|S t          |t&                    re r dz   i }|                                D ]E\  }}t                               t)          |          z   |          }|                    |           F|S i S )N/.c                 (    i | ]\  }}d z   |z   |S )rK   r)   )r6   keyvarcurrent_keys      r!   r8   z/TFModelV2._find_sub_modules.<locals>.<dictcomp>v   s9       C c!C'  r"   Tr:   z_{}_)
isinstancer   kerasmodelsModelModuler+   resubr   r   rG   Variabletupler=   	enumerater;   formatupdatedictstr)	rO   structretrN   r   rM   ivaluesub_varss	   `        r!   r;   zTFModelV2._find_sub_modulesj   s    fbho344 !	
6298U8U !	C'  vc311!C'$.CJ	** 	    & 0 0 0 > > D D F F   
 ,, 	((.. 	C%f-- % %5$66%,,q//15  

8$$$$J%% 	 #s"C$llnn % %
U$66{SXX7MuUU

8$$$$J	r"   )F)__name__
__module____qualname____doc__gymspacesSpaceintr   r^   r   
contextlibAbstractContextManagerr&   r   r   r*   r1   r	   r   boolr   r   r+   rH   staticmethodr;   __classcell__)r    s   @r!   r   r      s       * *
 1:# 1 j& 1 	 1
 & 1  1  1  1  1  1  1D): ) ) ) )D,    (D,< ( ( ( ( ( Xg#? ??	tJc:o!66	7? ? ? ?$ Xg#< <<	tJc:o!66	7< < < < $ $ \$ $ $ $ $r"   r   )rl   rV   typingr   r   r   	gymnasiumrh   ray._common.deprecationr   ray.rllib.models.modelv2r   ray.rllib.utils.annotationsr   r	   ray.rllib.utils.frameworkr
   ray.rllib.utils.typingr   r   ray.utilr   r   r   tfvr   r)   r"   r!   <module>rz      s       				 $ $ $ $ $ $ $ $ $ $     7 7 7 7 7 7 , , , , , , = = = = = = = = 3 3 3 3 3 3 > > > > > > > >      }R } } } } } } } } } }r"   