
    ]i                         S r SSKrSSKrSSKJr   " S S\R
                  5      r " S S\R
                  5      r " S S	\R
                  5      r " S
 S\R
                  5      r	 " S S\R
                  5      r
g)zData augmentations.
    N)nnc                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )Shift   z8
Randomly shift audio in time by up to `shift` samples.
c                 :   > [         TU ]  5         Xl        X l        g N)super__init__shiftsame)selfr   r   	__class__s      K/mnt/rpi/tmp/demucs-venv-sys/lib/python3.13/site-packages/demucs/augment.pyr
   Shift.__init__   s    
	    c                    UR                  5       u  p#pEXPR                  -
  nU R                  S:  a  U R                  (       d  USS U24   nU$ U R                  (       a  SOUn[        R
                  " U R                  X'SS/UR                  S9nUR                  SX4S5      n[        R                  " XaR                  S9n	UR                  SX-   5      nU$ )Nr   .   device   )
sizer   trainingr   thrandintr   expandarangegather)
r   wavbatchsourceschannelstimelengthsrcsoffsetsindexess
             r   forwardShift.forward   s    ),&

"::>==#ww,' 
 !IIq7**TZZ%q!1DSZZX!..WC))F::>jjG$56
r   )r   r   )i    F	__name__
__module____qualname____firstlineno____doc__r
   r(   __static_attributes____classcell__r   s   @r   r   r      s    
 r   r   c                       \ rS rSrSrS rSrg)FlipChannels&   z
Flip left-right channels.
c                 ^   UR                  5       u  p#pEU R                  (       a  UR                  S5      S:X  as  [        R                  " SX#SS4UR                  S9nUR                  SSSU5      nSU-
  n[        R                  " UR                  SU5      UR                  SU5      /SS9nU$ )N   r   r   r   dim)r   r   r   r   r   r   catr   )r   r   r    r!   r"   r#   leftrights           r   r(   FlipChannels.forward*   s    ),&==SXXa[A-::a%!Q!7

KD;;r2r40DHE&&#**Q-szz!U/CD!LC
r    Nr+   r,   r-   r.   r/   r(   r0   r>   r   r   r4   r4   &   s    r   r4   c                       \ rS rSrSrS rSrg)FlipSign4   z
Random sign flip.
c                     UR                  5       u  p#pEU R                  (       a=  [        R                  " SX#SS4UR                  [        R
                  S9nUSU-  S-
  -  nU$ )Nr7   r   )r   dtype)r   r   r   r   r   float32)r   r   r    r!   r"   r#   signss          r   r(   FlipSign.forward8   sV    ),&==JJq51a"8SUS]S]^EUQ'C
r   r>   Nr?   r>   r   r   rA   rA   4   s    r   rA   c                   6   ^  \ rS rSrSrSU 4S jjrS rSrU =r$ )Remix@   z$
Shuffle sources to make new mixes.
c                 :   > [         TU ]  5         Xl        X l        g)a|  
Shuffle sources within one batch.
Each batch is divided into groups of size `group_size` and shuffling is done within
each group separatly. This allow to keep the same probability distribution no matter
the number of GPUs. Without this grouping, using more GPUs would lead to a higher
probability of keeping two sources from the same track together which can impact
performance.
N)r	   r
   proba
group_size)r   rL   rM   r   s      r   r
   Remix.__init__D   s     	
$r   c                    UR                  5       u  p#pEUR                  nU R                  (       a  [        R                  " 5       U R                  :  a  U R
                  =(       d    UnX'-  S:w  a  [        SU SU 35      eX'-  nUR                  XX4U5      n[        R                  " [        R                  " XUSSUS9SS9n	UR                  SU	R                  SSSXE5      5      nUR                  X#XE5      nU$ )Nr   zBatch size z! must be divisible by group size r   r   r8   r   )r   r   r   randomrL   rM   
ValueErrorviewr   argsortrandr   r   )
r   r   r    streamsr"   r#   r   rM   groupspermutationss
             r   r(   Remix.forwardQ   s    ),&==V]]_tzz91EJ!Q& ;ug5VWaVb!cdd(F((6w$GC::bggf'1aX^&_*+-L**Q 3 3BB OPC((58:C
r   )rM   rL   )r      r*   r2   s   @r   rI   rI   @   s    % r   rI   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )Scaleb   c                 F   > [         TU ]  5         Xl        X l        X0l        g r   )r	   r
   rL   minmax)r   rL   r^   r_   r   s       r   r
   Scale.__init__c   s    
r   c                 *   UR                  5       u  p#pEUR                  nU R                  (       ab  [        R                  " 5       U R                  :  a?  [
        R                  " X#SSUS9R                  U R                  U R                  5      nX-  nU$ )Nr   r   )
r   r   r   rP   rL   r   emptyuniform_r^   r_   )r   r   r    rU   r"   r#   r   scaless           r   r(   Scale.forwardi   sk    ),&==V]]_tzz9XXea6BKKDHHVZV^V^_FMC
r   )r_   r^   rL   )g      ?g      ?g      ?)r+   r,   r-   r.   r
   r(   r0   r1   r2   s   @r   r[   r[   b   s     r   r[   )r/   rP   torchr   r   Moduler   r4   rA   rI   r[   r>   r   r   <module>rh      sf      BII 0299 	ryy 	BII DBII r   