
    &`i                          d dl Zd dlZd dlmZmZ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 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            \  ZZZe G d de                      Z dS )    N)BoxDiscreteMultiDiscrete)ModelCatalog)ModelV2restore_original_dimensions)normc_initializer)	TFModelV2)get_filter_config)SampleBatch)OldAPIStackoverride)try_import_tf)flatten_space)one_hotc                   r     e Zd ZdZ fdZ ee          d             Z ee          d             Z xZ	S )ComplexInputNetworka  TFModelV2 concat'ing CNN outputs to flat input(s), followed by FC(s).

    Note: This model should be used for complex (Dict or Tuple) observation
    spaces that have one or more image components.

    The data flow is as follows:

    `obs` (e.g. Tuple[img0, img1, discrete0]) -> `CNN0 + CNN1 + ONE-HOT`
    `CNN0 + CNN1 + ONE-HOT` -> concat all flat outputs -> `out`
    `out` -> (optional) FC-stack -> `out2`
    `out2` -> action (logits) and vaulue heads.
    c                 F	   t          |d          r|j        n|| _        |                    d          r| j        n|| _        t	                                          | j        ||||           t          | j                  | _        i | _        i | _	        i | _
        i | _        d}t          | j                  D ]h\  }}t          |j                  dk    rt          |t                     rd|v r|d         nt#          |j                  |                    d          g d}	t%          j        ||d |	dd	                    |          
          | j        |<   |t+          | j        |         j                  z  }t          |t.          t0          f          rt          |t.                    r|j        }
nt5          j        |j                  }
|d         |                    d          g d}	t%          j        t!          dd|
ft4          j                  |d |	dd                    |          
          | j	        |<   |t+          | j	        |         j                  z  }t+          t5          j        |j                            }
|d         |                    d          g d}	t%          j        t!          dd|
ft4          j                  |d |	dd                    |          
          | j        |<   |
| j
        |<   |t+          | j        |         j                  z  }j|                    dg           |                    dd          d}t%          j        t!          t?          d          t?          d          |ft4          j                  | j         d |dd          | _!        d | _"        d | _#        |rtH          j%        j&        '                    | j!        j        f          }tI          j%        j&        (                    |d tS          d          d          |          }tI          j%        j&        (                    dd tS          d          d          |          }tH          j%        j*        +                    |||g          | _"        d S | j!        j        | _        d S ) Noriginal_space_disable_preprocessor_apir      conv_filtersconv_activation)r   r   post_fcnet_hiddenstfzcnn_{})num_outputsmodel_config	frameworknamefcnet_hiddensfcnet_activation)r    r!   r   g      g      ?z
one_hot_{}z
flatten_{}r   post_fcnet_activationrelu)r    r!   z-infinf)shapedtypepost_fc_stack)r   r   g{Gz?logits)
activationkernel_initializerr      	value_out),hasattrr   getprocessed_obs_spacesuper__init__r   flattened_input_spacecnnsr   flatten_dimsflatten	enumeratelenr%   
isinstancer   r   r   get_model_v2formatintr   r   r   nnpsumnvecfloat32prodfloataction_spacer'   logits_and_value_model
_value_outr   keraslayersInputDenser	   modelsModel)self	obs_spacerC   r   r   r   concat_sizei	componentconfigsizepost_fc_stack_configconcat_layerlogits_layervalue_layer	__class__s                  y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/rllib/models/tf/complex_input_net.pyr1   zComplexInputNetwork.__init__#   s    y"233I$$ 	  ;<<D 	 
 	{L$	
 	
 	
 &343F%G%G" 	%d&@AA 8	@ 8	@LAy9?##q((Z	3-G-G( &55 %1$@$@*9?;;'3'7'78I'J'J*,   ,8  $!'"!++     	! s49Q<#;<<<I-'@AA $@i22 2$;DD6).11D%1/%B(4(8(89K(L(L*, 
 #/";cD7BJ77  $!'"%,,Q//# # #Q s4<?#>??? 279?3344%1/%B(4(8(89K(L(L*, 
 #/";cD7BJ77  $!'"%,,Q//# # #Q (,!!$s4<?#>??? *--.BBGG , 0 01H& Q Q 
  
 *6fuU||K>TTT  
 
 
 '+# 	>8?00$2D2P1RSSL8?00#4T#:#:	 1  
  L (///#4T#:#: 	 0  
  K +-(/*?*?|[9+ +D'''  $1=D    c                    t           j        |v rd|v r|t           j                 }n't          |t           j                 | j        d          }g }t	          t          j        |                    D ]p\  }}|| j        v rH | j        |         t          t           j        |i                    \  }}	|                    |           W|| j	        v rd|j
        j        v r(t           j        t          || j        |                   i}
nt           j        |i}
 | j	        |         t          |
                    \  }}	|                    |            | j        |         t          t           j        t                              t                              |d| j        |         g          t          j                  i                    \  }}	|                    |           rt                              |d          }|                     t          t           j        |i                    \  }}	| j        s|g fS |                     |          \  }}t                              |dg          | _        |g fS )Nobs_flatr   )	tensorlibr;   r+   )axis)r   OBSr   r/   r6   treer5   r3   appendr   r&   r   r2   r   castreshaper4   r@   concatr'   rD   rE   )rL   
input_dictstateseq_lensorig_obsoutsrO   rP   cnn_out_
one_hot_inone_hot_outnn_outoutr(   valuess                   rX   forwardzComplexInputNetwork.forward   sP   ?j((Z:-E-E!+/2HH2;?+T-EQU  H %dl8&<&<== 	$ 	$LAyDI~~)TYq\+{	6R*S*STT
G$$$$dl""IO000#%t'A!'D* *"JJ #./9!=J!0aZ1H1H!I!IQK((((+DLO'ORWW "

9r4;LQ;O6P Q Q "
. . 	 		 F####ii1i%%##K#0F$G$GHHQ * 	7N 44S99**VbT22rzrY   c                     | j         S )N)rE   )rL   s    rX   value_functionz"ComplexInputNetwork.value_function   s
    rY   )
__name__
__module____qualname____doc__r1   r   r   rq   rs   __classcell__)rW   s   @rX   r   r      s         y> y> y> y> y>v Xg0 0 0d Xg      rY   r   )!numpyr=   r`   gymnasium.spacesr   r   r   ray.rllib.models.catalogr   ray.rllib.models.modelv2r   r   ray.rllib.models.tf.miscr	   ray.rllib.models.tf.tf_modelv2r
   ray.rllib.models.utilsr   ray.rllib.policy.sample_batchr   ray.rllib.utils.annotationsr   r   ray.rllib.utils.frameworkr   "ray.rllib.utils.spaces.space_utilsr   ray.rllib.utils.tf_utilsr   tf1r   tfvr    rY   rX   <module>r      sS        9 9 9 9 9 9 9 9 9 9 1 1 1 1 1 1 I I I I I I I I 6 6 6 6 6 6 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 = = = = = = = = 3 3 3 3 3 3 < < < < < < , , , , , ,}R ~ ~ ~ ~ ~) ~ ~ ~ ~ ~rY   