
    h                       S r SSKJr  SSKJr  SSKJr  SSKrSSK	r
SSKJrJr  SSKJr  SS	/r " S
 S\
R"                  \\4   \
R$                  R&                  5      r " S S	\\\4   \
R$                  R&                  5      rg)zA collection of wrappers for modifying the reward.

* ``TransformReward`` - Transforms the reward by a function
* ``ClipReward`` - Clips the reward between a minimum and maximum value
    )annotations)Callable)SupportsFloatN)ActTypeObsType)InvalidBoundTransformReward
ClipRewardc                  4    \ rS rSrSr    SS jrSS jrSrg)	r	      a  Applies a function to the ``reward`` received from the environment's ``step``.

A vector version of the wrapper exists :class:`gymnasium.wrappers.vector.TransformReward`.

Example:
    >>> import gymnasium as gym
    >>> from gymnasium.wrappers import TransformReward
    >>> env = gym.make("CartPole-v1")
    >>> env = TransformReward(env, lambda r: 2 * r + 1)
    >>> _ = env.reset()
    >>> _, rew, _, _, _ = env.step(0)
    >>> rew
    3.0

Change logs:
 * v0.15.0 - Initially added
c                    [         R                  R                  R                  XS9  [         R                  R                  X5        X l        g)zInitialize TransformReward wrapper.

Args:
    env (Env): The environment to wrap
    func: (Callable): The function to apply to reward
funcN)gymutilsRecordConstructorArgs__init__RewardWrapperr   )selfenvr   s      ]/home/james-whalen/.local/lib/python3.13/site-packages/gymnasium/wrappers/transform_reward.pyr   TransformReward.__init__+   s8     			''000A""4-	    c                $    U R                  U5      $ )zbApply function to reward.

Args:
    reward (Union[float, int, np.ndarray]): environment's reward
r   )r   rewards     r   r   TransformReward.reward;   s     yy  r   r   N)r   gym.Env[ObsType, ActType]r   z(Callable[[SupportsFloat], SupportsFloat])r   r   returnr   )__name__
__module____qualname____firstlineno____doc__r   r   __static_attributes__ r   r   r	   r	      s#    $& 7 !r   c                  4    \ rS rSrSr  S     SS jjrSrg)r
   D   a  Clips the rewards for an environment between an upper and lower bound.

A vector version of the wrapper exists :class:`gymnasium.wrappers.vector.ClipReward`.

Example:
    >>> import gymnasium as gym
    >>> from gymnasium.wrappers import ClipReward
    >>> env = gym.make("CartPole-v1")
    >>> env = ClipReward(env, 0, 0.5)
    >>> _ = env.reset()
    >>> _, rew, _, _, _ = env.step(1)
    >>> rew
    np.float64(0.5)

Change logs:
 * v1.0.0 - Initially added
Nc                   ^^ Tc  Tc  [        S5      eTb6  Tb3  [        R                  " TT-
  S:  5      (       a  [        ST ST S35      e[        R                  R
                  R                  U TTS9  [        R                  XUU4S jS	9  g)
zInitialize ClipRewards wrapper.

Args:
    env (Env): The environment to wrap
    min_reward (Union[float, np.ndarray]): lower bound to apply
    max_reward (Union[float, np.ndarray]): higher bound to apply
Nz1Both `min_reward` and `max_reward` cannot be Noner   zMin reward (z#) must be smaller than max reward ())
min_reward
max_rewardc                0   > [         R                  " U TTS9$ )N)a_mina_max)npclip)xr+   r*   s    r   <lambda>%ClipReward.__init__.<locals>.<lambda>q   s    "''!:Z*Xr   )r   r   )r   r/   anyr   r   r   r   r	   )r   r   r*   r+   s     ``r   r   ClipReward.__init__W   s     *"4RSS#
(>vvj:-122"":,.QR\Q]]^_  			''00ZJ 	1 	
 	   X 	! 	
r   r%   )NN)r   r   r*   float | np.ndarray | Noner+   r6   )r   r    r!   r"   r#   r   r$   r%   r   r   r
   r
   D   s5    * 1504	
&
 .
 .	
 
r   )r#   
__future__r   collections.abcr   typingr   numpyr/   	gymnasiumr   gymnasium.corer   r   gymnasium.errorr   __all__r   r   r   r	   r
   r%   r   r   <module>r?      sy    # $     + ( l
++!gw&')H)H+!\.
'!12CII4S4S .
r   