o
    %i4                     @  s   d dl mZ d dlmZ d dlZd dlmZmZm	Z	m
Z
mZmZ d dlmZ g dZddddZd ddZd!d"ddZd!d#ddZd$ddZdS )%    )annotations)OptionalN)ActDropoutNormPoolRelPosEmbedding
split_args
has_option)get_norm_layerget_act_layerget_dropout_layerget_pool_layer   nametuple | strspatial_dims
int | Nonechannelsc                 C  st   | dkr	t j S t| \}}t||f }t|}t|dr&d|vr&||d< t|dr3d|vr3||d< |di |S )a~  
    Create a normalization layer instance.

    For example, to create normalization layers:

    .. code-block:: python

        from monai.networks.layers import get_norm_layer

        g_layer = get_norm_layer(name=("group", {"num_groups": 1}))
        n_layer = get_norm_layer(name="instance", spatial_dims=2)

    Args:
        name: a normalization type string or a tuple of type string and parameters.
        spatial_dims: number of spatial dimensions of the input.
        channels: number of features/channels when the normalization layer requires this parameter
            but it is not specified in the norm parameters.
     num_featuresnum_channelsN )torchnnIdentityr	   r   dictr   )r   r   r   	norm_name	norm_args	norm_typekw_argsr   r   ]/home/dell461/cl/sdc2/last_ska_mid/HISourceFinder-master-l/src/monai/networks/layers/utils.pyr      s   
r   c                 C  s4   | dkr	t j S t| \}}t| }|di |S )a  
    Create an activation layer instance.

    For example, to create activation layers:

    .. code-block:: python

        from monai.networks.layers import get_act_layer

        s_layer = get_act_layer(name="swish")
        p_layer = get_act_layer(name=("prelu", {"num_parameters": 1, "init": 0.25}))

    Args:
        name: an activation type string or a tuple of type string and parameters.
    r   Nr   )r   r   r   r	   r   )r   Zact_nameZact_argsZact_typer   r   r"   r   7   s
   
r   tuple | str | float | intdropout_dimc                 C  sZ   | dkr	t j S t| ttfrtj}dt| i}nt| \}}t||f }|di |S )a  
    Create a dropout layer instance.

    For example, to create dropout layers:

    .. code-block:: python

        from monai.networks.layers import get_dropout_layer

        d_layer = get_dropout_layer(name="dropout")
        a_layer = get_dropout_layer(name=("alphadropout", {"p": 0.25}))

    Args:
        name: a dropout ratio or a tuple of dropout type and parameters.
        dropout_dim: the spatial dimension of the dropout operation.
    r   pNr   )	r   r   r   
isinstanceintfloatr   ZDROPOUTr	   )r   r$   Z	drop_nameZ	drop_argsZ	drop_typer   r   r"   r   N   s   
r   c                 C  s8   | dkr	t j S t| \}}t||f }|di |S )a  
    Create a pooling layer instance.

    For example, to create adaptiveavg layer:

    .. code-block:: python

        from monai.networks.layers import get_pool_layer

        pool_layer = get_pool_layer(("adaptiveavg", {"output_size": (1, 1, 1)}), spatial_dims=3)

    Args:
        name: a pooling type string or a tuple of type string and parameters.
        spatial_dims: number of spatial dimensions of the input.

    r   Nr   )r   r   r   r	   r   )r   r   Z	pool_nameZ	pool_argsZ	pool_typer   r   r"   r   k   s
   
r   s_input_dimsOptional[tuple]c_dimr'   	num_headsc                   sH   t | \}}t|  |||d|} fdd| D } di |S )N)r)   r+   r,   c                   s    i | ]\}}t  |r||qS r   r
   ).0kvZembedding_typer   r"   
<dictcomp>   s     z/get_rel_pos_embedding_layer.<locals>.<dictcomp>r   )r	   r   items)r   r)   r+   r,   Zembedding_nameZembedding_argsr!   r   r0   r"   get_rel_pos_embedding_layer   s
   r3   )r   r   )r   r   r   r   r   r   )r   r   )r   )r   r#   r$   r   )r   r   r   r   )r   r   r)   r*   r+   r'   r,   r'   )
__future__r   typingr   torch.nnr   monai.networks.layers.factoriesr   r   r   r   r   r	   monai.utilsr   __all__r   r   r   r   r3   r   r   r   r"   <module>   s    
