o
    {i                     @   s.   d dl Z d dl mZmZ G dd dejZdS )    N)Tensornnc                       sV   e Zd Zddedef fddZddd	Zd
edefddZd
edefddZ	  Z
S )RMSNormh㈵>dimepsc                    s&   t    tt|| _|| _d S N)super__init__r   	Parametertorchonesweightr   )selfr   r   	__class__ B/data/cameron/keygrip/volume_dino_tracks/dinov3/layers/rms_norm.pyr
      s   

zRMSNorm.__init__returnNc                 C   s   t j| jd d S )N   )r   init	constant_r   )r   r   r   r   reset_parameters   s   zRMSNorm.reset_parametersxc                 C   s$   |t |djddd| j  S )N   T)keepdim)r   rsqrtpowmeanr   )r   r   r   r   r   _norm   s   $zRMSNorm._normc                 C   s   |  | |}|| j S r   )r    floattype_asr   )r   r   outputr   r   r   forward   s   
zRMSNorm.forward)r   )r   N)__name__
__module____qualname__intr!   r
   r   r   r    r$   __classcell__r   r   r   r   r   
   s
    
r   )r   r   r   Moduler   r   r   r   r   <module>   s   