o
    $i                     @   s   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 eZeG dd de
ejZdS )	    N)AppendBiasLayerSlimFCnormc_initializer)TorchModelV2)OldAPIStackoverride)try_import_torch)DictListModelConfigDict
TensorTypec                   @   s   e Zd ZdZdejjdejjdedede	f
ddZ
eed	ee	ef d
ee dedeee ffddZeedefddZdS )FullyConnectedNetworkz Generic fully connected network.	obs_spaceaction_spacenum_outputsmodel_confignamec              	   C   s*  t | ||||| tj|  t|dg t|dg  }|d}|dg s0|d}|d}|d| _|d| _| jrT|d d	ksPJ d
|f|d }g }	tt	
|j}
d | _|d d D ]}|	t|
|td|d |}
qg|r|r|	t|
|td|d |}
n9t|d	kr|	t|
|d td|d |d }
|rt|
|tdd d| _ntt	
|jg|dd   d | _| jr| jrt|| _tj|	 | _d | _| jstt	
|j}g }|D ]}|t|||tdd |}qtj| | _t|
dtd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_layers r<   Y/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/rllib/models/torch/fcnet.pyr!      s   




$

zFullyConnectedNetwork.__init__
input_dictstateseq_lensreturnc                 C   s^   |d   }||jd d| _| | j| _| jr | | jn| j}| jr+| |}||fS )Nobs_flatr   r   )	floatreshaper)   r3   r/   r2   r*   r   r-   )r4   r>   r?   r@   obslogitsr<   r<   r=   forward   s   
zFullyConnectedNetwork.forwardc                 C   sJ   | j d us	J d| jr| | | jd}|S | | j d}|S )Nzmust call forward() firstr    )r2   r0   r1   r3   squeeze)r4   outr<   r<   r=   value_function   s   
z$FullyConnectedNetwork.value_functionN)__name__
__module____qualname____doc__gymspacesSpacer&   r   strr!   r   r   r	   r   r
   rG   rJ   r<   r<   r<   r=   r      s2    
t

r   )logging	gymnasiumrO   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"   	getLoggerrK   loggerr#   r   r<   r<   r<   r=   <module>   s    

