
    Vh                     @    d dl mZ d dlZddlmZ  G d d          ZdS )    )contextmanagerN   )
swap_statec                   H    e Zd ZdZddZd Zd Zed             Zd	 Z	d
 Z
dS )ModelEMAz
    Perform EMA on a model. You can switch to the EMA weights temporarily
    with the `swap` method.

        ema = ModelEMA(model)
        with ema.swap():
            # compute valid metrics with averaged model.
    H.?Tcpuc                     || _         || _        i | _        d| _        || _        || _        |                                  d S )Nr   )decaymodelstatecountdeviceunbias_init)selfr   r   r   r   s        P/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/demucs/ema.py__init__zModelEMA.__init__   s=    





    c                 $   | j                                                                         D ]c\  }}|j        t          j        k    r| j        p|j        }|| j        vr1|                                	                    |d          | j        |<   dd S )NT)copy)
r   
state_dictitemsdtypetorchfloat32r   r   detachto)r   keyvalr   s       r   r   zModelEMA._init"   s    
--//5577 	E 	EHCyEM))[.CJF$*$$"%**,,//&t/"D"D
3	E 	Er   c                    | j         r"| j        | j        z  dz   | _        d| j        z  }n
d| j        z
  }| j                                                                        D ]\  }}|j        t          j        k    r| j	        p|j	        }| j
        |                             d|z
             | j
        |                             |                                                    |          |           d S )Nr   )alpha)r   r   r   r   r   r   r   r   r   r   r   mul_add_r   r   )r   wr   r    r   s        r   updatezModelEMA.update*   s    ; 	dj014DJDJAADJA
--//5577 	C 	CHCyEM))[.CJFJsO  Q'''JsO  !8!8 BBBB	C 	Cr   c              #   x   K   t          | j        | j                  5  d V  d d d            d S # 1 swxY w Y   d S )N)r   r   r   r   s    r   swapzModelEMA.swap7   s      
DJ// 	 	EEE	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   /33c                      | j         | j        dS )Nr   r   r+   r(   s    r   r   zModelEMA.state_dict<   s    dj999r   c                     |d         | _         |d                                         D ]%\  }}| j        |                             |           &d S )Nr   r   )r   r   r   copy_)r   r   kvs       r   load_state_dictzModelEMA.load_state_dict?   sW    7^
'N((** 	# 	#DAqJqM""""	# 	#r   N)r   Tr	   )__name__
__module____qualname____doc__r   r   r&   r   r)   r   r0    r   r   r   r      s            E E EC C C   ^: : :# # # # #r   r   )
contextlibr   r   statesr   r   r5   r   r   <module>r8      sf    & % % % % %       3# 3# 3# 3# 3# 3# 3# 3# 3# 3#r   