
    &`in                         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 d dlmZmZ e	 G d d	                      Zd
S )    )Dict)BaseEnv)RolloutWorker)Policy)OldAPIStack)
TensorType)AgentIDPolicyIDc                   ^    e Zd ZdZdeeef         dededee	e
f         deeef         f
dZdS )	ObservationFunctiona  Interceptor function for rewriting observations from the environment.

    These callbacks can be used for preprocessing of observations, especially
    in multi-agent scenarios.

    Observation functions can be specified in the multi-agent config by
    specifying ``{"observation_fn": your_obs_func}``. Note that
    ``your_obs_func`` can be a plain Python function.

    This API is **experimental**.
    	agent_obsworkerbase_envpoliciesreturnc                     |S )aZ  Callback run on each environment step to observe the environment.

        This method takes in the original agent observation dict returned by
        a MultiAgentEnv, and returns a possibly modified one. It can be
        thought of as a "wrapper" around the environment.

        TODO(ekl): allow end-to-end differentiation through the observation
            function and policy losses.

        TODO(ekl): enable batch processing.

        Args:
            agent_obs: Dictionary of default observations from the
                environment. The default implementation of observe() simply
                returns this dict.
            worker: Reference to the current rollout worker.
            base_env: BaseEnv running the episode. The underlying
                sub environment objects (BaseEnvs are vectorized) can be
                retrieved by calling `base_env.get_sub_environments()`.
            policies: Mapping of policy id to policy objects. In single
                agent mode there will only be a single "default" policy.
            episode: Episode state object.
            kwargs: Forward compatibility placeholder.

        Returns:
            new_agent_obs: copy of agent obs with updates. You can
                rewrite or drop data from the dict if needed (e.g., the env
                can have a dummy "global" observation, and the observer can
                merge the global state into individual observations.

        .. testcode::
            :skipif: True

            # Observer that merges global state into individual obs. It is
            # rewriting the discrete obs into a tuple with global state.
            example_obs_fn1({"a": 1, "b": 2, "global_state": 101}, ...)

        .. testoutput::

            {"a": [1, 101], "b": [2, 101]}

        .. testcode::
            :skipif: True

            # Observer for e.g., custom centralized critic model. It is
            # rewriting the discrete obs into a dict with more data.
            example_obs_fn2({"a": 1, "b": 2}, ...)

        .. testoutput::

            {"a": {"self": 1, "other": 2}, "b": {"self": 2, "other": 1}}
         )selfr   r   r   r   episodekws          }/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/rllib/evaluation/observation_function.py__call__zObservationFunction.__call__   s    |     N)__name__
__module____qualname____doc__r   r	   r   r   r   r
   r   r   r   r   r   r   r      s        
 
>+,> > 	>
 x'(> 
gz!	"> > > > > >r   r   N)typingr   ray.rllib.envr   ray.rllib.evaluationr   ray.rllib.policyr   ray.rllib.utils.annotationsr   ray.rllib.utils.frameworkr   ray.rllib.utils.typingr	   r
   r   r   r   r   <module>r%      s          ! ! ! ! ! ! . . . . . . # # # # # # 3 3 3 3 3 3 0 0 0 0 0 0 4 4 4 4 4 4 4 4 K K K K K K K K K Kr   