o
    `Û·i	  ã                   @   s¦   d dl mZmZmZmZ d dlmZ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mZ ededeeeegef d	ee fd
d„ƒZeeddd„ ƒƒZdS )é    )ÚAnyÚCallableÚDictÚType)ÚActionConnectorÚConnectorContext)Úregister_connector)ÚOldAPIStack©Úconvert_to_numpy)ÚActionConnectorDataTypeÚPolicyOutputTypeÚStateBatchesÚTensorStructTypeÚnameÚfnÚreturnc                    s2   G ‡ ‡‡fdd„dt ƒ‰ ˆˆ _ˆˆ _tˆˆ ƒ ˆ S )aÂ  A util to register any function transforming PolicyOutputType as an ActionConnector.

    The only requirement is that fn should take actions, states, and fetches as input,
    and return transformed actions, states, and fetches.

    Args:
        name: Name of the resulting actor connector.
        fn: The function that transforms PolicyOutputType.

    Returns:
        A new ActionConnector class that transforms PolicyOutputType using fn.
    c                       sH   e Zd Zdedef‡fdd„Z‡fdd„Zededef‡ fd	d
„ƒZ	dS )z?register_lambda_action_connector.<locals>.LambdaActionConnectorÚac_datar   c                    s<   t |jtƒs
J dƒ‚|j\}}}t|j|j|jˆ |||ƒƒS )Nz0Action connector requires PolicyOutputType data.)Ú
isinstanceÚoutputÚtupler   Úenv_idÚagent_idÚ
input_dict)Úselfr   ÚactionsÚstatesÚfetches)r   © úY/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/rllib/connectors/action/lambdas.pyÚ	transform$   s   ÿþ
üzIregister_lambda_action_connector.<locals>.LambdaActionConnector.transformc                    s   ˆ d fS ©Nr   )r   )r   r   r   Úto_state3   s   zHregister_lambda_action_connector.<locals>.LambdaActionConnector.to_stateÚctxÚparamsc                    s   ˆ | ƒS r!   r   )r#   r$   )ÚLambdaActionConnectorr   r   Ú
from_state6   s   zJregister_lambda_action_connector.<locals>.LambdaActionConnector.from_stateN)
Ú__name__Ú
__module__Ú__qualname__r   r    r"   Ústaticmethodr   r   r&   r   ©r%   r   r   r   r   r%   #   s    ÿþr%   )r   r'   r)   r   )r   r   r   r+   r   Ú register_lambda_action_connector   s
   
r,   ÚConvertToNumpyConnectorc                 C   s   t | ƒt |ƒ|fS r!   r
   )r   r   r   r   r   r   Ú<lambda>F   s   ýr.   N)Útypingr   r   r   r   Úray.rllib.connectors.connectorr   r   Úray.rllib.connectors.registryr   Úray.rllib.utils.annotationsr	   Úray.rllib.utils.numpyr   Úray.rllib.utils.typingr   r   r   r   Ústrr,   r-   r   r   r   r   Ú<module>   s(    ÿÿþ0þÿ