
    rh&                         d Z ddl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d	gZy)
z$Feature extractor class for EnCodec.    )OptionalUnionN   )SequenceFeatureExtractor)BatchFeature)PaddingStrategy
TensorTypeloggingc                   B    e Zd ZdZddgZ	 	 	 	 	 ddedededee   dee   f
 fd	Ze	d
ee   fd       Z
e	d
ee   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 )EncodecFeatureExtractora  
    Constructs an EnCodec 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.

    Instantiating a feature extractor with the defaults will yield a similar configuration to that of the
    [facebook/encodec_24khz](https://huggingface.co/facebook/encodec_24khz) architecture.

    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 24000):
            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 to fill the padding values.
        chunk_length_s (`float`, *optional*):
            If defined the audio is pre-processed into chunks of lengths `chunk_length_s` and then encoded.
        overlap (`float`, *optional*):
            Defines the overlap between each chunk. It is used to compute the `chunk_stride` using the following
            formulae : `int((1.0 - self.overlap) * self.chunk_length)`.
    input_valuespadding_maskfeature_sizesampling_ratepadding_valuechunk_length_soverlapc                 H    t        |   d|||d| || _        || _        y )N)r   r   r    )super__init__r   r   )selfr   r   r   r   r   kwargs	__class__s          /var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/transformers/models/encodec/feature_extraction_encodec.pyr   z EncodecFeatureExtractor.__init__7   s/     	wl-_lwpvw,    returnc                 `    | j                   y t        | j                   | j                  z        S )N)r   intr   r   s    r   chunk_lengthz$EncodecFeatureExtractor.chunk_lengthE   s-    &t**T-?-??@@r   c                     | j                   | j                  y t        dt        d| j                  z
  | j                  z              S )N   g      ?)r   r   maxr   r!   r    s    r   chunk_stridez$EncodecFeatureExtractor.chunk_strideM   s@    &$,,*>q#sT\\1T5F5FFGHHr   	raw_audiopadding
truncation
max_lengthreturn_tensorsc                    |;|| j                   k7  rYt        d|  d| j                    d| j                    d| d	      t        j                  d| j                  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w|
j(                  d   dk7  st        d|
j(                  d    d       d}t-        d|i      }| j.                  | j0                  ||r]t3        d |D              }t5        t        j6                  || j.                  z              }|dz
  | j.                  z  | j0                  z   }nc|r_t9        d |D              }t5        t        j:                  || j.                  z              }|dz
  | j.                  z  | j0                  z   }d}n|}|,| j=                  |||||      }|r|j?                  d      |d<   g }|j?                  d      D ]1  }
| j*                  dk(  r|
d   }
|jA                  |
j                         3 ||d<   ||jC                  |      }|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*):
                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 .zDIt is strongly recommended to pass the `sampling_rate` argument to `zN()`. 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 r#   z$Expected mono audio but example has z	 channelsz&Expected stereo audio but example has r   c              3   :   K   | ]  }|j                   d      ywr   Nshape.0arrays     r   	<genexpr>z3EncodecFeatureExtractor.__call__.<locals>.<genexpr>         GEQ G   c              3   :   K   | ]  }|j                   d      ywr1   r2   r4   s     r   r7   z3EncodecFeatureExtractor.__call__.<locals>.<genexpr>   r8   r9   r)   )r)   r(   r'   return_attention_maskattention_maskr   ).N)"r   
ValueErrorloggerwarningr   __name__bool
isinstancelisttuplenpndarrayasarrayfloat32Tr-   float64astype	enumeratendimr3   r   r   r%   r!   minr   floorr$   ceilpadpopappendconvert_to_tensors)r   r&   r'   r(   r)   r*   r   
is_batchedaudioidxexamplepadded_inputsr   nb_steps                 r   __call__z EncodecFeatureExtractor.__call__T   s   T $ 2 22 I$ P**+ ,**+9]O1F  NNVW[WeWeWnWnVo p\ \
 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 	hLC||a #YZaZgZgYh!ijj  A%',,!*; #GVXHYGZZc!dee  A%'--*;q*@ #I'--XZJ[I\\e!fgg	h #^Y$?@(T->->-JzOa  GY GG
bhhzD4E4E'EFG%kT->->>ARARR
  GY GG
bggj43D3D&DEF%kT->->>ARARR
& ,   HH%%&- % M 0=0A0ABR0Sn-$((8 	+G  A%!),		*	+
 )5n%%)<<^LMq Ws   6O>)r#   i]  g        NN)NFNNN)r@   
__module____qualname____doc__model_input_namesr   floatr   r   propertyr!   r%   r   rE   rF   rC   rA   strr   r	   r   r[   __classcell__)r   s   @r   r   r      s^   . (8 ""*.#'  	
 ! % Ahsm A A Ihsm I I @D%*$(;?'+zT%[$rzz2BDeDUUVz %c? :;<z TN	z
 SMz !sJ!78z  }z 
zr   r   )r^   typingr   r   numpyrE   !feature_extraction_sequence_utilsr   feature_extraction_utilsr   utilsr   r	   r
   
get_loggerr@   r>   r   __all__r   r   r   <module>rk      sJ    + "  I 4 9 9 
		H	%q6 qh %
%r   