o
    pi9	                     @   sL   d dl Z d dl mZ d dlmZ ddlmZ ddlmZ G dd deZdS )	    N)Tensor)Optional   )BaseWaveformTransform)
ObjectDictc                       s   e Zd ZdZh dZdZdZdZdZ						dde	d	e
d
e	dededee	 f fddZ				ddedee dee dee def
ddZ  ZS )TimeInversiona?  
    Reverse (invert) the audio along the time axis similar to random flip of
    an image in the visual domain. This can be relevant in the context of audio
    classification. It was successfully applied in the paper
    AudioCLIP: Extending CLIP to Image, Text and Audio
    https://arxiv.org/pdf/2106.13043.pdf
    >   	per_batchper_channelper_exampleTFr
         ?Nmodepp_modesample_ratetarget_rateoutput_typec                    s   t  j||||||d dS )zc
        :param mode:
        :param p:
        :param p_mode:
        :param sample_rate:
        )r   r   r   r   r   r   N)super__init__)selfr   r   r   r   r   r   	__class__ f/home/ubuntu/.local/lib/python3.10/site-packages/torch_audiomentations/augmentations/time_inversion.pyr      s   
zTimeInversion.__init__samplestargetsreturnc                 C   s:   t j|dd}|d u r|}nt j|dd}t||||dS )N))dims))r   r   r   r   )torchflipr   )r   r   r   r   r   flipped_samplesflipped_targetsr   r   r   apply_transform2   s   zTimeInversion.apply_transform)r
   r   NNNN)NNNN)__name__
__module____qualname____doc__supported_modessupports_multichannelrequires_sample_ratesupports_targetrequires_targetstrfloatintr   r   r   r   r#   __classcell__r   r   r   r   r   	   sR    r   )	r   r   typingr   core.transforms_interfacer   utils.object_dictr   r   r   r   r   r   <module>   s    