o
    ÓÙ¾iý  ã                   @   s<   d dl Z d dl mZ G dd„ dejƒZG dd„ dejƒZdS )é    N)Únnc                	       sN   e Zd ZdZ		ddedededdf‡ fd	d
„Zdej	dej	fdd„Z
‡  ZS )Ú
LayerScalez6 LayerScale on tensors with channels in last-dim.
    çñhãˆµøä>FÚdimÚinit_valuesÚinplaceÚreturnNc                    ó*   t ƒ  ¡  || _t |t |¡ ¡| _d S ©N©ÚsuperÚ__init__r   r   Ú	ParameterÚtorchÚonesÚgamma©Úselfr   r   r   ©Ú	__class__© úK/home/ubuntu/.local/lib/python3.10/site-packages/timm/layers/layer_scale.pyr      ó   
zLayerScale.__init__Úxc                 C   s   | j r	| | j¡S || j S r
   )r   Úmul_r   )r   r   r   r   r   Úforward   s   zLayerScale.forward©r   F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatÚboolr   r   ÚTensorr   Ú__classcell__r   r   r   r   r      s    üþýüû
r   c                       s<   e Zd ZdZ		ddededef‡ fdd„Zd	d
„ Z‡  Z	S )ÚLayerScale2dz7 LayerScale for tensors with torch 2D NCHW layout.
    r   Fr   r   r   c                    r	   r
   r   r   r   r   r   r      r   zLayerScale2d.__init__c                 C   s*   | j  dddd¡}| jr| |¡S || S )Né   éÿÿÿÿ)r   Úviewr   r   )r   r   r   r   r   r   r   #   s   zLayerScale2d.forwardr   )
r   r   r   r    r!   r"   r#   r   r   r%   r   r   r   r   r&      s    üþýü
r&   )r   r   ÚModuler   r&   r   r   r   r   Ú<module>   s    