o
    `۷i(                     @   s   d dl mZmZmZ d dlmZ d dlmZmZm	Z	 e		ddeeee
f  de
fdd	Zeddeee
ef  de
fddZedd ZedddZdS )    )CallableOptionalUnion)DeveloperAPI)try_import_jaxtry_import_tftry_import_torchNtfname	frameworkc           
      C   sX  t | r| S t| tr|  n| }|dkrP|dv rdS t \}}t|| d}|dur,|S |dv r3|jS |dkr:|jS |dkrA|jS |dkrH|j	S |dkrO|j
S nT|d	kr|dv rZdS t \}}|dv rg|jjS |dkro|jjS |dkrw|jjS |dkr|jjS n$|d
v sJ d||dv rdS t \}}}	t|j|d}|dur|S td| |)a  Returns a framework specific activation function, given a name string.

    Args:
        name: One of "relu" (default), "tanh", "elu",
            "swish" (or "silu", which is the same), or "linear" (same as None).
        framework: One of "jax", "tf|tf2" or "torch".

    Returns:
        A framework-specific activtion function. e.g. tf.nn.tanh or
            torch.nn.ReLU. None if name in ["linear", None].

    Raises:
        ValueError: If name is an unknown activation function.
    torch)linearNN)swishsilurelutanhelusoftmaxjaxr	   tf2Unsupported framework `{}`!)Unknown activation ({}) for framework={}!)callable
isinstancestrlowerr   getattrSiLUReLUTanhELUSoftmaxr   nnr   r   	hard_tanhr   formatr   
ValueError)
r
   r   
name_lower_r#   fnr   tf1r	   tfv r,   L/home/ubuntu/vllm_env/lib/python3.10/site-packages/ray/rllib/models/utils.pyget_activation_fn   s\   


r.   r   c                 C   s   t | s| du r
| S |dkr@t| tr|  n| }t \}}|ds+td|  dt|j|d}|dur8|S td| d|dkr`t	 \}}}t|j
j| d}|durX|S td	|  d
dS )a  Returns the framework-specific initializer class or function.

    This function relies fully on the specified initializer classes and
    functions in the frameworks `torch` and `tf2` (see for `torch`
    https://pytorch.org/docs/stable/nn.init.html and for `tf2` see
    https://www.tensorflow.org/api_docs/python/tf/keras/initializers).

    Note, for framework `torch` the in-place initializers are needed, i.e. names
    should end with an underscore `_`, e.g. `glorot_uniform_`.

    Args:
        name: Name of the initializer class or function in one of the two
            supported frameworks, i.e. `torch` or `tf2`.
        framework: The framework string, either `torch  or `tf2`.

    Returns:
        A framework-specific function or class defining an initializer to be used
        for network initialization,

    Raises:
        `ValueError` if the `name` is neither class or function in the specified
        `framework`. Raises also a `ValueError`, if `name` does not define an
        in-place initializer for framework `torch`.
    Nr   r(   zNot an in-place initializer: Torch weight initializers need to be provided as their in-place version, i.e. <initializaer_name> + '_'. See https://pytorch.org/docs/stable/nn.init.html. User provided .zUnknown initializer name: z$ is not a method in `torch.nn.init`!r   zUnknown initializer: z1 is not a initializer in `tf.keras.initializers`!)r   r   r   r   r   endswithr&   r   initr   kerasinitializers)r
   r   r'   r(   r#   r)   r	   r,   r,   r-   get_initializer_fnW   s4   



r4   c                 C   s  dddgdgdddgdgdddgdgg}dddgdgdddgdgdddgdgg}dddgdgdddgdgd	ddgdgd
ddgdgg}dddgdgdddgdgdddgdgg}dddgdgdddgdgg}t | } t| dv r| dd ddgks| dd ddgkr|S t| dv r| dd ddgks| dd ddgkr|S t| dv r| dd d	d	gks| dd d	d	gkr|S t| dv r| dd ddgks| dd ddgkr|S t| dv r| dd ddgks| dd ddgkr|S t | g dkrd}nd}td| | d )a  Returns a default Conv2D filter config (list) for a given image shape.

    Args:
        shape (Tuple[int]): The input (image) shape, e.g. (84,84,3).

    Returns:
        List[list]: The Conv2D filter configuration usable as `conv_filters`
            inside a model config dict.
                             @         )r9      N`   T   *   
   )      r@   zThis is the default atari obs shape. You may want to look at one of RLlib's Atari examples for an example of how to wrap an Atari env.  z/No default CNN configuration for obs shape {}. a  You can specify `conv_filters` manually through your AlgorithmConfig's model_config. Default configurations are only available for inputs of the following shapes: [42, 42, K], [84, 84, K], [64, 64, K], [10, 10, K]. You may want to use a custom RLModule or a ConnectorV2 for that.)listlenr&   r%   )shapefilters_96x96filters_84x84filters_64x64filters_42x42filters_10x10
atari_helpr,   r,   r-   get_filter_config   sT   44444rQ   c                 C   s  t | r| S |dkr/t \}}|dusJ dddlm} | dv r&|j S | dkr/|j S |dkrQt \}}|dus@J d| dv rH|jj	S | dkrP|jj
S n+|d	v s\J d
|t \}}}|dusjJ d| dv rs|jjjS | dkr||jjjS td| |)a  Returns a framework specific initializer, given a name string.

    Args:
        name: One of "xavier_uniform" (default), "xavier_normal".
        framework: One of "jax", "tf|tf2" or "torch".

    Returns:
        A framework-specific initializer function, e.g.
            tf.keras.initializers.GlorotUniform or
            torch.nn.init.xavier_uniform_.

    Raises:
        ValueError: If name is an unknown initializer.
    r   Nz1`flax` not installed. Try `pip install jax flax`.r   )Ndefaultxavier_uniformxavier_normalr   z/`torch` not installed. Try `pip install torch`.r   r   z9`tensorflow` not installed. Try `pip install tensorflow`.r   )r   r   
flax.linenlinenr3   rS   rT   r   r1   xavier_uniform_xavier_normal_r%   r   r2   GlorotUniformGlorotNormalr&   )r
   r   r(   flaxr#   r*   r	   r+   r,   r,   r-   get_initializer   s@   







r\   )Nr	   )r   )r	   )typingr   r   r   ray.rllib.utils.annotationsr   ray.rllib.utils.frameworkr   r   r   r   r.   r4   rQ   r\   r,   r,   r,   r-   <module>   s"    O"P
G