
    sg                         d Z ddlmZmZmZ ddlZddlmZ ddl	m
Z
 ddlmZmZmZ  ej                  e      Z G d d	e      Zy)
zFeature extractor class for DAC    )ListOptionalUnionN   )SequenceFeatureExtractor)BatchFeature)PaddingStrategy
TensorTypeloggingc                        e Zd ZdZddgZ	 	 	 	 ddedededef fdZ	 	 	 	 	 dd	ee	j                  ee   ee	j                     eee      f   d
eeeeef      dee   dee   deeeef      dee   defdZ xZS )DacFeatureExtractora>  
    Constructs an Dac feature extractor.

    This feature extractor inherits from [`~feature_extraction_sequence_utils.SequenceFeatureExtractor`] which contains
    most of the main methods. Users should refer to this superclass for more information regarding those methods.

    Args:
        feature_size (`int`, *optional*, defaults to 1):
            The feature dimension of the extracted features. Use 1 for mono, 2 for stereo.
        sampling_rate (`int`, *optional*, defaults to 16000):
            The sampling rate at which the audio waveform should be digitalized, expressed in hertz (Hz).
        padding_value (`float`, *optional*, defaults to 0.0):
            The value that is used for padding.
        hop_length (`int`, *optional*, defaults to 512):
            Overlap length between successive windows.
    input_valuesn_quantizersfeature_sizesampling_ratepadding_value
hop_lengthc                 :    t        |   d|||d| || _        y )N)r   r   r    )super__init__r   )selfr   r   r   r   kwargs	__class__s         a/var/www/html/venv/lib/python3.12/site-packages/transformers/models/dac/feature_extraction_dac.pyr   zDacFeatureExtractor.__init__1   s'     	wl-_lwpvw$    	raw_audiopadding
truncation
max_lengthreturn_tensorsreturnc                    |;|| j                   k7  rAt        d|  d| j                    d| j                    d| d	      t        j                  d       |r|rt        d      |d	}t	        t        |t        t        f      xr( t        |d
   t        j                  t        t        f            }|r=|D cg c]1  }t        j                  |t        j                        j                  3 }}n|s@t        |t        j                        s&t        j                  |t        j                        }nht        |t        j                        rN|j                  t        j                  t        j                        u r|j                  t        j                        }|s t        j                  |      j                  g}t!        |      D ]  \  }	}
|
j"                  dkD  rt        d|
j$                         | j&                  dk(  r+|
j"                  dk7  rt        d|
j$                  d    d      | j&                  dk(  swt        d       t)        d|i      }| j+                  ||||d| j,                        }|r)|j.                  ddt        j0                  ddf   |_        g }|j3                  d      D ]1  }
| j&                  dk(  r|
d   }
|j5                  |
j                         3 ||d<   ||j7                  |      }|S c c}w )a  
        Main method to featurize and prepare for the model one or several sequence(s).

        Args:
            raw_audio (`np.ndarray`, `List[float]`, `List[np.ndarray]`, `List[List[float]]`):
                The sequence or batch of sequences to be processed. Each sequence can be a numpy array, a list of float
                values, a list of numpy arrays or a list of list of float values. The numpy array must be of shape
                `(num_samples,)` for mono audio (`feature_size = 1`), or `(2, num_samples)` for stereo audio
                (`feature_size = 2`).
            padding (`bool`, `str` or [`~utils.PaddingStrategy`], *optional*, defaults to `True`):
                Select a strategy to pad the returned sequences (according to the model's padding side and padding
                index) among:

                - `True` or `'longest'`: Pad to the longest sequence in the batch (or no padding if only a single
                  sequence if provided).
                - `'max_length'`: Pad to a maximum length specified with the argument `max_length` or to the maximum
                  acceptable input length for the model if that argument is not provided.
                - `False` or `'do_not_pad'` (default): No padding (i.e., can output a batch with sequences of different
                  lengths).
            truncation (`bool`, *optional*, defaults to `False`):
                Activates truncation to cut input sequences longer than `max_length` to `max_length`.
            max_length (`int`, *optional*):
                Maximum length of the returned list and optionally padding length (see above).
            return_tensors (`str` or [`~utils.TensorType`], *optional*, default to 'pt'):
                If set, will return tensors instead of list of python integers. Acceptable values are:

                - `'tf'`: Return TensorFlow `tf.constant` objects.
                - `'pt'`: Return PyTorch `torch.Tensor` objects.
                - `'np'`: Return Numpy `np.ndarray` objects.
            sampling_rate (`int`, *optional*):
                The sampling rate at which the `audio` input was sampled. It is strongly recommended to pass
                `sampling_rate` at the forward call to prevent silent errors.
        Nz3The model corresponding to this feature extractor: z& was trained using a sampling rate of zB. Please make sure that the provided audio input was sampled with z	 and not .zIt is strongly recommended to pass the `sampling_rate` argument to this function. Failing to do so can result in silent errors that might be hard to debug.zABoth padding and truncation were set. Make sure you only set one.Tr   )dtype   z6Expected input shape (channels, length) but got shape    z$Expected mono audio but example has z	 channelsz$Stereo audio isn't supported for nowr   F)r    r   r   return_attention_maskpad_to_multiple_of).N)r   
ValueErrorloggerwarningbool
isinstancelisttuplenpndarrayasarrayfloat32Tr%   float64astype	enumeratendimshaper   r   padr   r   newaxispopappendconvert_to_tensors)r   r   r   r   r    r!   r   
is_batchedaudioidxexampler   padded_inputss                r   __call__zDacFeatureExtractor.__call__<   s   T $ 2 22 I$ P**+ ,**+9]O1F  NN\
 z`aa_Gy4-0jj1PRPZPZ\acgOh6i

 LUV5E<>>VIVJy"**$E

9BJJ?I	2::.9??bhhrzzFZ3Z!((4I I.001I &i0 	ILC||a #YZaZgZgYh!ijj  A%',,!*; #GVXHYGZZc!dee  A% !GHH	I $^Y$?@ !!"'# ! 
 )6)C)CArzzSTDT)UM&$((8 	+G  A%!),		*	+
 )5n%%)<<^LMY Ws   56L)r'   i>  g        i   )NFNNN)__name__
__module____qualname____doc__model_input_namesintfloatr   r   r2   r3   r   r   r.   strr	   r
   r   rF   __classcell__)r   s   @r   r   r      s   " (8 ""	%	% 	% 		%
 	% @D%*$(;?'+nT%[$rzz2BDeDUUVn %c? :;<n TN	n
 SMn !sJ!78n  }n 
nr   r   )rJ   typingr   r   r   numpyr2   !feature_extraction_sequence_utilsr   feature_extraction_utilsr   utilsr	   r
   r   
get_loggerrG   r,   r   r   r   r   <module>rV      sB    & ( (  I 4 9 9 
		H	%M2 Mr   