o
    `۷i/
                     @   s   d dl mZmZmZ d dlZd dl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 eded	eegef d
ee fddZedefddZeedeZdS )    )AnyCallableTypeN)AgentConnectorConnectorContext)register_connector)SampleBatch)OldAPIStack)AgentConnectorDataTypeAgentConnectorsOutputnamefnreturnc                    s2   G  fdddt   _ _t   S )a  A util to register any simple transforming function as an AgentConnector

    The only requirement is that fn should take a single data object and return
    a single data object.

    Args:
        name: Name of the resulting actor connector.
        fn: The function that transforms env / agent data.

    Returns:
        A new AgentConnector class that transforms data 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_agent_connector.<locals>.LambdaAgentConnectorac_datar   c                    s   t |j|j |jS N)r
   env_idagent_iddata)selfr   )r    X/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/rllib/connectors/agent/lambdas.py	transform%   s   zGregister_lambda_agent_connector.<locals>.LambdaAgentConnector.transformc                    s    d fS r   r   )r   )r   r   r   to_state*   s   zFregister_lambda_agent_connector.<locals>.LambdaAgentConnector.to_statectxparamsc                    s    | S r   r   )r   r   )LambdaAgentConnectorr   r   
from_state-   s   zHregister_lambda_agent_connector.<locals>.LambdaAgentConnector.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_agent_connector   s
   
r"   r   c                 C   s   t | ts	J d| j}| j}i }| D ])\}}|tjtjfv s&|dr+|||< q|d u r4d ||< qt	
t|||< qt|dd}t||S )Nz7Single agent data must be of type AgentConnectorsOutput
state_out_F)is_training)
isinstancer   raw_dictsample_batchitemsr   INFOSACTIONS
startswithnparraytreeflatten)r   r&   r'   	flattenedkvr   r   r   flatten_data9   s$   
r3   FlattenDataAgentConnector)typingr   r   r   numpyr,   r.   ray.rllib.connectors.connectorr   r   ray.rllib.connectors.registryr   ray.rllib.policy.sample_batchr   ray.rllib.utils.annotationsr	   ray.rllib.utils.typingr
   r   strr"   r3   r4   r   r   r   r   <module>   s*    %