
    &`i)                         d dl 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 d dlmZmZ  e            \  ZZZe G d	 d
e                      ZdS )    )DictListN)normc_initializer)	TFModelV2)get_activation_fnget_filter_config)OldAPIStack)try_import_tf)ModelConfigDict
TensorTypec            
            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e	ef         d	ee         d
edeee         ffdZdefdZ xZS )VisionNetworka.  Generic vision network implemented in ModelV2 API.

    An additional post-conv fully connected stack can be added and configured
    via the config keys:
    `post_fcnet_hiddens`: Dense layer sizes after the Conv2D stack.
    `post_fcnet_activation`: Activation function to use for this FC stack.
    	obs_spaceaction_spacenum_outputsmodel_confignamec                    |                     d          st          |j                  |d<   t          t          |                               |||||           t          | j                             d          d          }| j        d         }t          |          dk    s
J d            |                     dg           }t          |                     d          d          }	| j                             d	          }
| j                             d
          }|j        }d| _	        t          j        j                            |d          }|}d| _        t          |d d         d          D ]o\  }\  }}}t          j        j                            ||t#          |t$          t&          f          r|n||f|ddd                    |                    |          }p|d         \  }}}|
r|rt          j        j                            |r|n||t#          |t$          t&          f          r|n||f|ddd          |          }|d d         |r|gng z   }|}t          |          D ]W\  }}|}t          j        j                            |d                    |          |	t-          d                    |          }Xnt          j        j                            ||t#          |t$          t&          f          r|n||f|ddd                    t          |                              |          }|rn|rt          j        j                            |d         ddg|	ddd          |          x}}t          |dd          |gz             D ]r\  }}|}t          j        j                            |d                    |dz             |t          |          dz
  k     r|	nd t-          d                    |          }sn8|}t          j        j                            |ddgd ddd          |          x}}|j        d         dk    s|j        d         dk    rFt/          d                    | j        d         | j        t%          |j                                      nd| _        t          j        j                            d          |          }t          |          D ]U\  }}t          j        j                            |d                    |          |	t-          d                    |          }V|}|j        d         | _        |}|rs| j        s-t          j        j                            d           |          }t          j        j                            ddd t-          d                     |          }nj|}t          |d d         d          D ]o\  }\  }}}t          j        j                            ||t#          |t$          t&          f          r|n||f|ddd!                    |                    |          }p|d         \  }}}t          j        j                            ||t#          |t$          t&          f          r|n||f|ddd!                    t          |                              |          }t          j        j                            dddgd ddd"          |          }t          j        j                            d#           |          }t          j                            |||g          | _        d S )$Nconv_filtersconv_activationtf)	frameworkr   z0Must provide at least 1 entry in `conv_filters`!post_fcnet_hiddenspost_fcnet_activationno_final_linearvf_share_layerschannels_lastobservations)shaper   F   samezconv{})strides
activationpaddingdata_formatr   validconv_outzpost_fcnet_{}g      ?)r   r$   kernel_initializer)r$   r%   r&   r      zGiven `conv_filters` ({}) do not result in a [B, 1, 1, {} (`num_outputs`)] shape (but in {})! Please adjust your Conv2D stack such that the dims 1 and 2 are both 1.T)r&   c                 >    t                               | ddg          S Nr!   r*   axisr   squeezexs    q/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/rllib/models/tf/visionnet.py<lambda>z(VisionNetwork.__init__.<locals>.<lambda>   s    bjj!Qj88     	value_outg{Gz?zconv_value_{}conv_value_outc                 >    t                               | ddg          S r,   r/   r1   s    r3   r4   z(VisionNetwork.__init__.<locals>.<lambda>   s    AQPQF9S9S r5   )getr   r   superr   __init__r   r   lenr&   r   keraslayersInputlast_layer_is_flattened	enumerateConv2D
isinstancelisttupleformatDenser   
ValueErrorr   FlattenLambdaModel
base_model)selfr   r   r   r   r   r$   filtersr   r   r   r   input_shapeinputs
last_layeriout_sizekernelstridelayer_sizesfeature_outlast_cnn
logits_outr6   	__class__s                           r3   r;   zVisionNetwork.__init__   s    // 	N+<Y_+M+ML(mT""++|[,	
 	
 	
 '!!"344
 
 

 #N37||a!S *--.BBGG 1455!
 !
 !
 +//0ABB+//0ABBo*&&[~&NN
 (-$ .7wss|Q-G-G 	 	)A)&&//ftUm44&f%%+__Q'' 0 
 
 
 
JJ $+2; &&
  k	7{ k	7//.?KftUm44&f%%+ 0 
 
 
 
J -SbS1!3;K %K(55  8(X_22(//224'8'='=	 3  
  

 //ftUm44&f%%+__S\\22 0 
 
 
 
J  ?7% ",.HO,B,B*1-A#8 &$3' -C - - !-" -" "Hz (1*122.+>( ( & &8 '1%'X_%:%:$!0!7!7A!>!> 3'9#:#:Q#>>> (='<!%/@/E/E &; & & %&& &&

	& #-K,.HO,B,B#A#' &$3' -C - - !-" -" "Hz >!$))X^A->!-C-C$& '-f -n= , 00' '		 	 	 .D 04,X_444QQ 

 $--?#@#@ " "KAx!#!6!6 ,33A66#8+<S+A+A	 "7 " "
 !"" ""JJ )#-#3A#6 
  0	/  ho4488   -- #4T#:#:	 .  
  II  J1:73B3<1K1K  --HffX_33!&4-88*FF &))" /(//22 4 
 
 
 


 (/r{$Hff//ftUm44&f%%+$++CLL99 0 
 
 
 
J //A+% 0    J ../S/STT I (..*i1HIIr5   
input_dictstateseq_lensreturnc                 8   |d         }| j         dk    rt                              |g d          }|                     t                              |t          j                            \  }| _        | j        r||fS t                              |ddg          |fS )Nobschannels_first)r   r*      r!   r!   r*   r-   )	r&   r   	transposerL   castfloat32
_value_outr@   r0   )rM   r[   r\   r]   r`   	model_outs         r3   forwardzVisionNetwork.forward   s     ///,,sLLL11C%)__RWWS"*5M5M%N%N"	4?' 	=e## ::iq!f:55u<<r5   c                 D    t                               | j        dg          S )Nr    )r   reshaperf   )rM   s    r3   value_functionzVisionNetwork.value_function  s    zz$/B4000r5   )__name__
__module____qualname____doc__gymspacesSpaceintr   strr;   r   r   r   rh   rk   __classcell__)rZ   s   @r3   r   r      s        [J:#[J j&[J 	[J
 &[J [J [J [J [J [J [Jz=j)= J= 	=
 d:&	'= = = =$1
 1 1 1 1 1 1 1 1r5   r   )typingr   r   	gymnasiumrp   ray.rllib.models.tf.miscr   ray.rllib.models.tf.tf_modelv2r   ray.rllib.models.utilsr   r   ray.rllib.utils.annotationsr	   ray.rllib.utils.frameworkr
   ray.rllib.utils.typingr   r   tf1r   tfvr    r5   r3   <module>r      s                6 6 6 6 6 6 4 4 4 4 4 4 G G G G G G G G 3 3 3 3 3 3 3 3 3 3 3 3 > > > > > > > >}R y1 y1 y1 y1 y1I y1 y1 y1 y1 y1r5   