o
    1 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 )NZfcnet_hiddensZpost_fcnet_hiddensZfcnet_activationZpost_fcnet_activationno_final_linearvf_share_layersfree_log_std   r   z$num_outputs must be divisible by twog        Zlog_std)Zdtyper   Zobservations)shaper      zfc_{}g      ?)r   
activationZkernel_initializerZfc_outg{Gz?c                    s$   t t  jdt | d dgS )Nr   r   )tfZtileZexpand_dimslog_std_varr   )xself e/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/ray/rllib/models/tf/fcnet.pytiled_log_stdl   s   $z5FullyConnectedNetwork.__init__.<locals>.tiled_log_std)Zaxiszfc_value_{}	value_out)superr   __init__listgetr   r   VariableZfloat32r   ZkerasZlayersZInputintnpprodr   ZDenseformatr   lenr   LambdaConcatenateZModel
base_model)r   r   r   r   r   r   Zhiddensr   r   r   r   ZinputsZ
last_layerZ
logits_outisizer    Zlog_std_outZlast_vf_layerr!   	__class__r   r   r#      s   








	$
zFullyConnectedNetwork.__init__
input_dictstateseq_lensreturnc                 C   s   |  |d \}| _||fS )NZobs_flat)r.   
_value_out)r   r3   r4   r5   Z	model_outr   r   r   forward   s   zFullyConnectedNetwork.forwardc                 C   s   t | jdgS )Nr   )r   Zreshaper7   r   r   r   r   value_function   s   z$FullyConnectedNetwork.value_function)__name__
__module____qualname____doc__gymspacesZSpacer'   r	   strr#   r   r
   r   r8   r9   __classcell__r   r   r1   r   r      s.    w


	r   )typingr   Z	gymnasiumr>   numpyr(   Zray.rllib.models.tf.miscr   Zray.rllib.models.tf.tf_modelv2r   Zray.rllib.models.utilsr   Zray.rllib.utils.annotationsr   Zray.rllib.utils.frameworkr   Zray.rllib.utils.typingr   r	   r
   Ztf1r   Ztfvr   r   r   r   r   <module>   s    