
    Vh>                     N    d Z ddlZddlZddZ ej        d          Z	 	 dd
ZdS )z Ways to make the model stronger.    N   c                    |                                  dk    sJ | j        d         | j        d         k    sJ | j        d         }t          j        ||| j        | j                  }t          |          D ]6}|                     |          }|                    dd          }|d|z   z  }7|	                                S )zXThis is the power method. batch size is used to try multiple starting point in parallel.   r   r   )devicedtypeT)dimkeepdimg|=)
r   shapetorchrandnr   r   rangemmnormmean)mnitersbsr   b_nr   s           P/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/demucs/svd.pypower_iterationr      s    5577a<<<<71:####
'!*CCAHAG<<<A6]]  DDGGvv!Tv**99;;    i  皙?r   FTc
                 4   d}
t                                           |k    rdS |                                 D ]]}|                    d          D ]B\  }}|                                dz  |k     r"|rnt          |t          j        j        t          j        j	        f          r>|
                                dv r(|                    dd                                          }|
                                dk    r$|                    t          |          d	          }nZ|
                                d
k    r$|                    t          |          d	          }n|
                                dk    r$|r(|
                                dk    sJ ||j        f            |rBt          j        |d          d                             d                                          }n|rq|j        \  }}||k     r(|                    |                                          }n'|                                                    |          }t+          |||	          }n5t          j        |||          d         d                             d          }|
|z  }
D_|
|z  S )a  
    Penalty on the largest singular value for a layer.
    Args:
        - model: model to penalize
        - min_size: minimum size in MB of a layer to penalize.
        - dim: projection dimension for the svd_lowrank. Higher is better but slower.
        - niters: number of iterations in the algorithm used by svd_lowrank.
        - powm: use power method instead of lowrank SVD, my own experience
            is that it is both slower and less stable.
        - convtr: when True, differentiate between Conv and Transposed Conv.
            this is kept for compatibility with older experiments.
        - proba: probability to apply the penalty.
        - conv_only: only apply to conv and conv transposed, not LSTM
            (might not be reliable for other models than Demucs).
        - exact: use exact SVD (slow but useful at validation).
        - bs: batch_size for power method.
    r   g        F)recursei   )      r   r   r   r   )
compute_uv)penalty_rngrandommodulesnamed_parametersnumel
isinstancer   nnConvTranspose1dConvTranspose2dr   	transpose
contiguousviewlenr
   svdpowmaxr   tr   svd_lowrank)modelmin_sizer   r   powmconvtrproba	conv_onlyexactr   totalr   namepestimatear   r   s                     r   svd_penaltyr?      sU   & Ee##r]]__  ))%)88 	 	GD!wwyy5 8++ ;a%(":EH<T!UVV ;uuww&((KK1--88::uuww!||FF3q662&&AFF3q662&&A 5577a<<<$<<< 
J 9Q5999!<@@CCGGII Jw1q55QSSUUAAA*1fb99 ,QV<<Q?BFFqIIXEE7	8 5=r   )r   r   )	r   r   r   FTr   FFr   )__doc__r"   r   r   Randomr!   r?    r   r   <module>rC      sn    ' &     " fmD!! JN:;4 4 4 4 4 4r   