U
    “PÓhÈ  ã                   @  s’   d dl mZ d dlZd dlmZmZmZmZm	Z	 d dl
mZ ddddgZdd
dddœdd„Zd
dœdd„Zddddœdd„Zdd
ddœdd„ZdS )é    )ÚannotationsN)ÚActÚDropoutÚNormÚPoolÚ
split_args)Ú
has_optionÚget_norm_layerÚget_act_layerÚget_dropout_layerÚget_pool_layeré   ztuple | strz
int | None)ÚnameÚspatial_dimsÚchannelsc                 C  sp   | dkrt j ¡ S t| ƒ\}}t||f }t|ƒ}t|dƒrLd|krL||d< t|dƒrfd|krf||d< |f |Ž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_channels)ÚtorchÚnnÚIdentityr   r   Údictr   )r   r   r   Z	norm_nameZ	norm_argsÚ	norm_typeÚkw_args© r   úP/home/dell461/cl/sdc2/HISourceFinder-master-l/src/monai/networks/layers/utils.pyr	      s    
)r   c                 C  s0   | dkrt j ¡ S t| ƒ\}}t| }|f |Ž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   )r   r   r   r   r   )r   Zact_nameZact_argsZact_typer   r   r   r
   5   s
    
ztuple | str | float | int)r   Údropout_dimc                 C  sV   | dkrt j ¡ S t| ttfƒr4tj}dt| ƒi}nt| ƒ\}}t||f }|f |Ž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   Úp)	r   r   r   Ú
isinstanceÚintÚfloatr   ZDROPOUTr   )r   r   Z	drop_nameZ	drop_argsZ	drop_typer   r   r   r   L   s    
)r   r   c                 C  s4   | dkrt j ¡ S t| ƒ\}}t||f }|f |Ž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   )r   r   r   r   r   )r   r   Z	pool_nameZ	pool_argsZ	pool_typer   r   r   r   i   s
    
)r   r   )r   )r   )Ú
__future__r   Útorch.nnr   Úmonai.networks.layers.factoriesr   r   r   r   r   Úmonai.utilsr   Ú__all__r	   r
   r   r   r   r   r   r   Ú<module>   s   