
    Vh                         d Z ddlZddlZddlmZ  G d dej                  Z G d dej                  Z G d d	ej                  Z G d
 dej                  Z	 G d dej                  Z
dS )zData augmentations.
    N)nnc                   *     e Zd ZdZd fd	Zd Z xZS )Shiftz@
    Randomly shift audio in time by up to `shift` samples.
        Fc                 d    t                                                       || _        || _        d S N)super__init__shiftsame)selfr   r   	__class__s      T/var/www/html/movieo_spanner_bot/venv/lib/python3.11/site-packages/demucs/augment.pyr
   zShift.__init__   s+    
			    c                    |                                 \  }}}}|| j        z
  }| j        dk    r| j        s|dd |f         }n|| j        rdn|}t	          j        | j        ||ddg|j                  }|                    d||d          }t	          j        ||j                  }	|	                    d|	|z             }|S )Nr   .   device   )
sizer   trainingr   thrandintr   expandarangegather)
r   wavbatchsourceschannelstimelengthsrcsoffsetsindexess
             r   forwardzShift.forward   s    ),&w$
":>>= 7#ww,' I2qq7*TZ%q!1DSZXXX!..WhCC)F3:>>>jjGg$566
r   )r   F__name__
__module____qualname____doc__r
   r'   __classcell__r   s   @r   r   r      sV              
      r   r   c                       e Zd ZdZd ZdS )FlipChannelsz#
    Flip left-right channels.
    c                 r   |                                 \  }}}}| j        r|                     d          dk    r}t          j        d||ddf|j                  }|                    ddd|          }d|z
  }t          j        |                    d|          |                    d|          gd          }|S )N   r   r   r   dim)r   r   r   r   r   r   catr   )r   r   r   r    r!   r"   leftrights           r   r'   zFlipChannels.forward*   s    ),&w$= 	MSXXa[[A--:a%!Q!7
KKKD;;r2r400DHE&#**Q--szz!U/C/CD!LLLC
r   Nr)   r*   r+   r,   r'    r   r   r0   r0   &   s-             r   r0   c                       e Zd ZdZd ZdS )FlipSignz
    Random sign flip.
    c                     |                                 \  }}}}| j        r6t          j        d||ddf|j        t          j                  }|d|z  dz
  z  }|S )Nr2   r   )r   dtype)r   r   r   r   r   float32)r   r   r   r    r!   r"   signss          r   r'   zFlipSign.forward8   s`    ),&w$= 	(Jq5'1a"8SUS]^^^EUQ'C
r   Nr8   r9   r   r   r;   r;   4   s-             r   r;   c                   *     e Zd ZdZd fd	Zd Z xZS )Remixz,
    Shuffle sources to make new mixes.
    r      c                 d    t                                                       || _        || _        dS )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   rD   rE   r   s      r   r
   zRemix.__init__D   s-     	
$r   c           
         |                                 \  }}}}|j        }| j        rt          j                    | j        k     r| j        p|}||z  dk    rt          d| d|           ||z  }|                    |||||          }t          j	        t          j
        |||dd|          d          }	|                    d|	                    ddd||                    }|                    ||||          }|S )Nr   zBatch size z! must be divisible by group size r   r   r3   r   )r   r   r   randomrD   rE   
ValueErrorviewr   argsortrandr   r   )
r   r   r   streamsr!   r"   r   rE   groupspermutationss
             r   r'   zRemix.forwardQ   s   ),&w$= 		;V]__tz991EJz!Q&& !cu!c!cWa!c!cdddj(F((6:w$GGC:bgfj'1aX^&_&_&_*+- - -L**Q 3 3BB$ O OPPC((5'8T::C
r   )r   rB   r(   r.   s   @r   rA   rA   @   sV         % % % % % %      r   rA   c                   &     e Zd Zd fd	Zd Z xZS )Scale      ?      ?      ?c                 r    t                                                       || _        || _        || _        d S r   )r	   r
   rD   minmax)r   rD   rU   rV   r   s       r   r
   zScale.__init__c   s2    
r   c                    |                                 \  }}}}|j        }| j        rXt          j                    | j        k     r<t          j        ||dd|                              | j        | j	                  }||z  }|S )Nr   r   )
r   r   r   rG   rD   r   emptyuniform_rU   rV   )r   r   r   rL   r!   r"   r   scaless           r   r'   zScale.forwardi   sy    ),&w$= 	V]__tz99XeWa6BBBKKDHVZV^__F6MC
r   )rQ   rR   rS   )r)   r*   r+   r
   r'   r-   r.   s   @r   rP   rP   b   sL                   r   rP   )r,   rG   torchr   r   Moduler   r0   r;   rA   rP   r9   r   r   <module>r]      s                  BI   0    29   	 	 	 	 	ry 	 	 	    BI   D    BI     r   