
    &`i                         d dl Z 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mZmZmZ  e            \  ZZ e j        e          Ze G d de
ej                              ZdS )	    N)AppendBiasLayerSlimFCnormc_initializer)TorchModelV2)OldAPIStackoverride)try_import_torch)DictListModelConfigDict
TensorTypec                       e Zd ZdZdej        j        dej        j        dedede	f
dZ
 ee          dee	ef         d	ee         d
edeee         ffd            Z ee          defd            ZdS )FullyConnectedNetworkz Generic fully connected network.	obs_spaceaction_spacenum_outputsmodel_confignamec                    t          j        | |||||           t          j                            |            t	          |                    dg                     t	          |                    dg                     z   }|                    d          }|                    dg           s|                    d          }|                    d          }|                    d          | _        |                    d          | _        | j        r|dz  d	k    sJ d
|f            |dz  }g }	t          t          j
        |j                            }
d | _        |d d         D ]7}|	                    t          |
|t          d          |                     |}
8|r8|r6|	                    t          |
|t          d          |                     |}
nt!          |          d	k    rA|	                    t          |
|d         t          d          |                     |d         }
|r&t          |
|t          d          d           | _        n=t          t          j
        |j                            g|dd          z   d         | _        | j        r| j        rt%          |          | _        t          j        |	 | _        d | _        | j        sut          t          j
        |j                            }g }|D ]7}|                    t          |||t          d                               |}8t          j        | | _        t          |
dt          d          d           | _        d | _        d | _        d S )Nfcnet_hiddenspost_fcnet_hiddensfcnet_activationpost_fcnet_activationno_final_linearvf_share_layersfree_log_std   r   z$num_outputs must be divisible by twog      ?)in_sizeout_sizeinitializeractivation_fng{Gz?)r   r    r"   r!      )r   __init__nnModulelistgetr   r   intnpprodshape_logitsappendr   r   lenr   r   _append_free_log_std
Sequential_hidden_layers_value_branch_separate_value_branch	_features_last_flat_in)selfr   r   r   r   r   hiddens
activationr   layersprev_layer_sizesizeprev_vf_layer_size	vf_layerss                 p/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/rllib/models/torch/fcnet.pyr$   zFullyConnectedNetwork.__init__   s    	)\;d	
 	
 	
 		4   |''<<==1266A
 A
 
 "%%&899
44 	C%))*ABBJ&**+<==+//0ABB(,,^<<  	+?a'''6*''' &*Kbgio6677 CRCL 		# 		#DMM+! 1# 6 6",	     #OO  	X{ 	XMM+( 1# 6 6",	     *OO 7||a /!($5c$:$:&0	     #*"+ X%+( 1$ 7 7"&	      &))A)A%B%B$Cgbccl$RTV#W   	E 	E(7(D(DD% mV4&*## 	D!$RWY_%=%=!>!>I 	* 	*   2!%&0$5c$:$:	     &*""*,-*CD'##)$//	
 
 
 !    
input_dictstateseq_lensreturnc                 P   |d                                          }|                    |j        d         d          | _        |                     | j                  | _        | j        r|                     | j                  n| j        }| j        r|                     |          }||fS )Nobs_flatr   r   )	floatreshaper,   r6   r2   r5   r-   r   r0   )r7   rA   rB   rC   obslogitss         r?   forwardzFullyConnectedNetwork.forward   s     $**,, [[1r::,,T-?@@15Qdn---4> 	7..v66Fu}r@   c                    | j         
J d            | j        rA|                     |                     | j                                                d          }n-|                     | j                                       d          }|S )Nzmust call forward() firstr#   )r5   r3   r4   r6   squeeze)r7   outs     r?   value_functionz$FullyConnectedNetwork.value_function   s    ~))+F)))& 	@$$++D,>?? gajj C $$T^44<<Q??C
r@   N)__name__
__module____qualname____doc__gymspacesSpacer)   r   strr$   r   r   r
   r   r   rK   rO    r@   r?   r   r      s       **r":#r" j&r" 	r"
 &r" r" r" r" r"h Xlj) J 	
 d:&	'    Xl
      r@   r   )logging	gymnasiumrT   numpyr*   ray.rllib.models.torch.miscr   r   r   $ray.rllib.models.torch.torch_modelv2r   ray.rllib.utils.annotationsr   r   ray.rllib.utils.frameworkr	   ray.rllib.utils.typingr
   r   r   r   torchr%   	getLoggerrP   loggerr&   r   rX   r@   r?   <module>rd      s            R R R R R R R R R R = = = = = = = = = = = = = = 6 6 6 6 6 6 J J J J J J J J J J J J	r		8	$	$ O O O O OL") O O O O Or@   