o
    $i                     @   s   d dl mZ d dlZd dl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 d dlmZmZmZ e \ZZZeG d	d
 d
e	ZdS )    )DictN)normc_initializer)	TFModelV2)get_activation_fn)OldAPIStack)try_import_tf)ListModelConfigDict
TensorTypec                
       sz   e Zd ZdZdejjdejjdedede	f
 fddZ
d	ee	ef d
ee dedeee ffddZdefddZ  ZS )FullyConnectedNetworkz;Generic fully connected network implemented in ModelV2 API.	obs_spaceaction_spacenum_outputsmodel_confignamec                    s  t t ||||| t|dg t|dg  }|d}|dg s,|d}t|}|d}|d}	|d}
|
r^|d d	ksMJ d
|f|d }tjdg| tjdd _	tj
jjtt|jfdd}|}d }d}|d d D ]}tj
jj|d||tdd|}|d7 }qz|r|rtj
jj|d|tdd|}n>t|d	krtj
jj|d d||tdd|}|rtj
jj|dd tdd|}ntt|jg|dd   d  _|
r|d ur fdd}tj
j||}tj
jjdd||g}d }|	s-|}d}|D ]}tj
jj|d||tdd|}|d7 }qtj
jjddd tdd|d ur@|n|}tj
||d urN|n||g _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        log_std)dtyper   observations)shaper      zfc_{}g      ?)r   
activationkernel_initializerfc_outg{Gz?c                    s$   t t  jdt | d dgS )Nr   r   )tftileexpand_dimslog_std_varr   )xself V/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/ray/rllib/models/tf/fcnet.pytiled_log_stdl   s   $z5FullyConnectedNetwork.__init__.<locals>.tiled_log_std)axiszfc_value_{}	value_out)superr   __init__listgetr   r"   Variablefloat32r%   keraslayersInputintnpprodr   Denseformatr   lenr   LambdaConcatenateModel
base_model)r(   r   r   r   r   r   hiddensr   r   r   r   inputs
last_layer
logits_outisizer+   log_std_outlast_vf_layerr-   	__class__r'   r*   r/      s   








	$
zFullyConnectedNetwork.__init__
input_dictstateseq_lensreturnc                 C   s   |  |d \}| _||fS )Nobs_flat)r@   
_value_out)r(   rK   rL   rM   	model_outr)   r)   r*   forward   s   zFullyConnectedNetwork.forwardc                 C   s   t | jdgS )Nr   )r"   reshaperP   r'   r)   r)   r*   value_function   s   z$FullyConnectedNetwork.value_function)__name__
__module____qualname____doc__gymspacesSpacer7   r	   strr/   r   r
   r   rR   rT   __classcell__r)   r)   rI   r*   r      s.    w


	r   )typingr   	gymnasiumrY   numpyr8   ray.rllib.models.tf.miscr   ray.rllib.models.tf.tf_modelv2r   ray.rllib.models.utilsr   ray.rllib.utils.annotationsr   ray.rllib.utils.frameworkr   ray.rllib.utils.typingr   r	   r
   tf1r"   tfvr   r)   r)   r)   r*   <module>   s    