o
    `۷i4*                     @   s   d dl mZmZ d dlZd dlZd dlmZm	Z	m
Z
mZ d dlmZ d dlmZmZ d dlmZmZ d dlmZ d dlmZmZ e \ZZeG d	d
 d
eejZdS )    )DictListN)
SlimConv2dSlimFCnormc_initializersame_padding)TorchModelV2)get_activation_fnget_filter_config)OldAPIStackoverride)try_import_torch)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edefddZdS )VisionNetworkzGeneric vision network.	obs_spaceaction_spacenum_outputsmodel_confignamec                 C   s  | dst|j|d< t| ||||| tj|  | j d}| jd }t|dks1J d| dg }t	| ddd}	| j d	}
| j d
}d| _
d | _g }|j\}}}||g}|d d D ]\}}}t|||\}}|t||||||d |}|}qd|d \}}}|
r|r|r|n|}|t||||d |d |d d |r|gng  }t|D ]\}}|t|||	tdd |}qn|t||||d |d |rDt|d |d  | t|d |d  | g}t|ddgddg\}}|r6|t  |}t||g D ]\}}|t|||t|d k r$|	nd tdd |}q| | _nt||ddgd|d d| _n
d| _
|t  tj| | _| jd u rwt| j dddd }| |}|jd | _d  | _ | _!|rt|dtdd d| _!nYg }|j\}}}||g}|d d D ]\}}}t|||\}}|t||||||d |}|}q|d \}}}|t||||d |d |t|dddd d d tj| | _ d | _"d S )Nconv_filtersconv_activationr   z0Must provide at least 1 entry in `conv_filters`!post_fcnet_hiddenspost_fcnet_activationtorch)	frameworkno_final_linearvf_share_layersF)activation_fng      ?)in_sizeout_sizer   initializer   T   g{Gz?)r"   r   )in_channelsout_channelskernelstridepaddingr   )#getr
   shaper   __init__nnModuler   lenr	   last_layer_is_flattened_logitsr   appendr   	enumerater   r   npceilFlattenpop
Sequential_convsr   r   
from_numpyr   samplepermute	unsqueezefloat_value_branch_separate_value_branch	_features)selfr   r   r   r   r   
activationfiltersr   r   r   r   layerswhr%   r    r&   r'   r(   r)   r!   layer_sizesi_dummy_in	dummy_out	vf_layers rN   V/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/rllib/models/torch/visionnet.pyr,      s8  












zVisionNetwork.__init__
input_dictstateseq_lensreturnc                 C   s   |d   | _| jdddd| _| | j}| js|| _| jsa| jr(| |}t|jdkr[|jd dks=|jd dkrMt	d
| jd | jt|j|d}|d}||fS |}||fS ||fS )	Nobsr      r#   r$      zGiven `conv_filters` ({}) do not result in a [B, {} (`num_outputs`), 1, 1] shape (but in {})! Please adjust your Conv2D stack such that the last 2 dims are both 1.r   )r>   rA   r<   r9   r?   r0   r1   r/   r+   
ValueErrorformatr   r   listsqueeze)rB   rP   rQ   rR   conv_outlogitsrN   rN   rO   forward   s0   



zVisionNetwork.forwardc                 C   sv   | j d us	J d| jr!| | j }|d}|d}|dS | js0| j d}|d}n| j }| |dS )Nzmust call forward() firstrU   r$   r#   )rA   r?   rZ   r0   r@   )rB   valuefeaturesrN   rN   rO   value_function  s   


zVisionNetwork.value_functionrT   c                 C   s.   |  |dddd}|d}|d}|S )Nr   rU   r#   r$   )r9   r<   rZ   )rB   rT   resrN   rN   rO   _hidden_layers"  s   

zVisionNetwork._hidden_layersN)__name__
__module____qualname____doc__gymspacesSpaceintr   strr,   r   r   r   r   r   r]   r`   rb   rN   rN   rN   rO   r      s6    
 T

%r   )typingr   r   	gymnasiumrg   numpyr4   ray.rllib.models.torch.miscr   r   r   r   $ray.rllib.models.torch.torch_modelv2r   ray.rllib.models.utilsr	   r
   ray.rllib.utils.annotationsr   r   ray.rllib.utils.frameworkr   ray.rllib.utils.typingr   r   r   r-   r.   r   rN   rN   rN   rO   <module>   s    
