Ë
    ÛÓ^j:  ã                   ó  — d dl Z d dl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	 ddeded	ed
ededededz  dej&                  fd„Zdej&                  dedededej&                  f
d„Z G d„ de«      ZdgZy)é    N)ÚSequenceé   )ÚSequenceFeatureExtractor)ÚBatchFeature)ÚPaddingStrategyÚ
TensorTypeÚloggingÚn_freqsÚf_minÚf_maxÚn_melsÚsample_rateÚ
fft_lengthÚnormÚreturnc                 ó  — |�|dk7  rt        d«      ‚t        j                  | t        j                  ¬«      ||z  z  }dt	        j
                  d|dz  z   «      z  }dt	        j
                  d|dz  z   «      z  }	t        j                  ||	|dz   «      }
dd	|
dz  z  dz
  z  }|d
d |dd z
  }t        j                  |d«      t        j                  |d
«      z
  }t        j                  d
t        j                  ¬«      }d|dd…dd…f   z  |dd z  }|dd…dd…f   |d
d z  }t        j                  |t        j                  ||«      «      }|�/|dk(  r*d|d|dz    |d| z
  z  }|t        j                  |d«      z  }|S )a©  Create a frequency bin conversion matrix (NumPy version).

    Args:
        n_freqs (int): Number of frequencies to highlight/apply
        f_min (float): Minimum frequency (Hz)
        f_max (float): Maximum frequency (Hz)
        n_mels (int): Number of mel filterbanks
        sample_rate (int): Sample rate of the audio waveform
        fft_length (int): FFT length
        norm (Optional[str]): If 'slaney', divide the triangular mel weights by
          the width of the mel band (area normalization). (Default: ``None``)

    Returns:
        np.ndarray: Triangular filter banks (fb matrix) of size (``n_freqs``,
        ``n_mels``)
        meaning number of frequencies to highlight/apply to x the number of
        filterbanks.
        Each column is a filterbank so that assuming there is a matrix A of
        size (..., ``n_freqs``), the applied result would be
        ``A @ create_fb_matrix_numpy(A.shape[-1], ...)``.
    NÚslaneyz$norm must be one of None or 'slaney'©Údtypeg     F¤@ç      ð?g     à…@é   é
   é   éÿÿÿÿr   g      ð¿éþÿÿÿg       @)Ú
ValueErrorÚnpÚarangeÚfloat32ÚmathÚlog10ÚlinspaceÚexpand_dimsÚzerosÚmaximumÚminimum)r
   r   r   r   r   r   r   Ú	all_freqsÚm_minÚm_maxÚm_ptsÚf_ptsÚf_diffÚslopesÚzeroÚdown_slopesÚ	up_slopesÚfbÚenorms                      ú�/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/gemma3n/feature_extraction_gemma3n.pyÚcreate_fb_matrixr4      sŒ  € ð> Ð˜D HÒ,ÜÐ?Ó@Ð@ô —	‘	˜'¬¯©Ô4¸ÀjÑ8PÑQ€Ið ”T—Z‘Z  u¨u¡}Ñ 5Ó6Ñ6€EØ”T—Z‘Z  u¨u¡}Ñ 5Ó6Ñ6€EÜ�K‰K˜˜u f¨q¡jÓ1€Eà�R˜E F™NÑ+¨cÑ1Ñ2€Eà�1�2ˆY˜˜s ˜Ñ#€FÜ�^‰^˜E 1Ó%¬¯©°yÀ!Ó(DÑD€Fä�8‰8�AœRŸZ™ZÔ(€DØ˜&¢ C R C ™.Ñ(¨F°3°B¨KÑ7€KØ’q˜!™"�u‘  q r 
Ñ*€IÜ	�‰�Dœ"Ÿ*™* [°)Ó<Ó	=€BàÐ˜D HÒ,à�u˜Q ¨!¡Ð,¨u°W°f¨~Ñ=Ñ>ˆØ
Œb�n‰n˜U AÓ&Ñ&ˆà€Ió    ÚarrayÚ	dimensionÚsizeÚstepc                 óÀ  — | j                   dk7  rt        d«      ‚|dk7  r|| j                   dz
  k7  rt        d«      ‚| j                  \  }}||z
  |z  dz   }|dk  r$t        j                  |d|f| j
                  ¬«      S |||f}| j                  d   | j                  d   |z  | j                  d   f}t        j                  j                  j                  | ||¬«      S )	zNA basic NumPy equivalent of PyTorch's unfold for 2D arrays along the last dim.r   zFThis unfold implementation currently supports 2D arrays (batch, time).r   r   zFThis unfold implementation only supports unfolding the last dimension.r   r   )ÚshapeÚstrides)
Úndimr   r;   r   r$   r   r<   ÚlibÚstride_tricksÚ
as_strided)	r6   r7   r8   r9   Ú
batch_sizeÚoriginal_lengthÚ
num_framesÚoutput_shapeÚoutput_stridess	            r3   Ú_unfoldrF   Y   sÚ   € à‡z�z�Q‚ÜÐaÓbÐbØ�B‚˜9¨¯
©
°Q©Ò6ÜÐaÓbÐbà"'§+¡+Ñ€J�Ø! DÑ(¨TÑ1°AÑ5€Jà�Q‚Ü�x‰x˜ Q¨Ð-°U·[±[ÔAÐAà 
¨DÐ1€LØ—m‘m AÑ&¨¯©°aÑ(8¸4Ñ(?ÀÇÁÈqÑAQÐR€Nä�6‰6×Ñ×*Ñ*¨5¸ÈnÐ*Ó]Ð]r5   c            "       óÆ  ‡ — e Zd ZdZddgZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d!dedededed	ed
edededededededededee   dz  dee   dz  f ˆ fd„Z	de
j                  de
j                  dee
j                  e
j                  f   fd„Z	 	 	 	 	 	 d"de
j                  ee   z  ee
j                     z  eee      z  deez  ez  dedz  dededz  deez  dz  dedz  defd „Zˆ xZS )#ÚGemma3nAudioFeatureExtractoraT
  An audio feature extractor Universal Speech Models https://huggingface.co/papers/2303.01037.

    Args:
        feature_size (`int`, *optional*, defaults to 128):
            The feature dimension of the extracted features.
        sampling_rate (`int`, *optional*, defaults to 16000):
            The sampling rate at which the audio files should be digitalized expressed in hertz (Hz).
        padding_value (`float`, *optional*, defaults to 0.0):
            Padding value used to pad the audio. Should correspond to silences.
        return_attention_mask (`bool`, *optional*, defaults to `True`):
            Whether to return the attention mask for the generated MEL spectrograms.
        frame_length_ms (`float`, *optional*, defaults to 32.0):
            The length of a frame in milliseconds.
        hop_length_ms (`float`, *optional*, defaults to 10.0):
            Length of the overlapping windows for the STFT used to obtain the Mel Frequency coefficients.
        min_frequency (`float`, *optional*, defaults to 125.0):
            The minimum frequency (in Hz) for the Mel filterbank.
        max_frequency (`float`, *optional*, defaults to 7600.0):
            The maximum frequency (in Hz) for the Mel filterbank.
        preemphasis (`float`, *optional*, defaults to 0.97):
            The preemphasis coefficient.
        preemphasis_htk_flavor (`bool`, *optional*, defaults to `True`):
            Whether to use HTK-style preemphasis.
        fft_overdrive (`bool`, *optional*, defaults to `True`):
            Whether to use FFT overdrive.
        dither (`float`, *optional*, defaults to 0.0):
            Adds dithering. In other words, adds a small Gaussian noise to each frame.
            E.g. use 0.0001 to add dithering with a normal distribution centered
            around 0.0 with standard deviation 0.0001 (assuming [-1,+1] range of raw_speech).
            The value 0.0 means no dithering.
            Dithering has similar effect as `spectrogram(mel_floor=...)`. It reduces
            the high log_mel_fbank values for signals with hard-zero sections,
            when VAD cutoff is present in the signal.
        input_scale_factor (`float`, *optional*, defaults to 1.0):
            Scaling factor applied to the input waveform.
        mel_floor (`float`, *optional*, defaults to 1e-05):
            Minimum value for Mel spectrograms to avoid log(0).
        per_bin_mean (`Optional[Sequence[float]]`, *optional*):
            Mean values for per-bin normalization.
        per_bin_stddev (`Optional[Sequence[float]]`, *optional*):
            Standard deviation values for per-bin normalization.
    Úinput_featuresÚinput_features_maskNÚfeature_sizeÚsampling_rateÚpadding_valueÚreturn_attention_maskÚframe_length_msÚhop_length_msÚmin_frequencyÚmax_frequencyÚpreemphasisÚpreemphasis_htk_flavorÚfft_overdriveÚditherÚinput_scale_factorÚ	mel_floorÚper_bin_meanÚper_bin_stddevc           	      óN  •— t        ‰| �  d||||dœ|¤Ž || _        || _        |	| _        |
| _        || _        || _        || _        t        t        ||z  dz  «      «      | _        t        t        ||z  dz  «      «      | _        t        j                  |t        j                  ¬«      | _        dt#        j$                  t#        j&                  | j                  «      «      z  }| j                  r|dz  }|| _        t        j*                  | j                  t        j,                  ¬«      }ddt        j.                  dt        j0                  z  |z  | j                  z  «      z
  z  }|j3                  t        j,                  «      | _        t7        | j(                  dz  dz   |||| j8                  d |¬«      | _        |�,t        j                  |«      j=                  dd|«      | _        nd | _        |�,t        j                  |«      j=                  dd|«      | _         y d | _         y )	N)rK   rL   rM   rN   g     @�@r   r   g      à?r   )r
   r   r   r   r   r   r   © )!ÚsuperÚ__init__rQ   rR   rS   rT   rU   rV   rW   ÚintÚroundÚframe_lengthÚ
hop_lengthr   r6   Úfloat64rX   r    ÚceilÚlog2r   r   r   ÚcosÚpiÚastypeÚwindowr4   rL   Úmel_filtersÚreshaperY   rZ   )ÚselfrK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   Úkwargsr   Úhann_arangeri   Ú	__class__s                        €r3   r^   z%Gemma3nAudioFeatureExtractor.__init__š   sà  ø€ ô( 	‰Ñð 	
Ø%Ø'Ø'Ø"7ñ		
ð
 ò	
ð +ˆÔØ*ˆÔØ&ˆÔØ&<ˆÔ#Ø*ˆÔØˆŒØ"4ˆÔÜ¤ m°oÑ&EÈÑ&NÓ OÓPˆÔÜœe M°MÑ$AÀFÑ$JÓKÓLˆŒÜŸ™ )´2·:±:Ô>ˆŒàœ$Ÿ)™)¤D§I¡I¨d×.?Ñ.?Ó$@ÓAÑAˆ
Ø×ÒØ˜!‰OˆJØ$ˆŒä—i‘i × 1Ñ 1¼¿¹ÔDˆØ˜œBŸF™F 1¤r§u¡u¡9¨{Ñ#:¸T×=NÑ=NÑ#NÓOÑOÑPˆØ—m‘m¤B§J¡JÓ/ˆŒä+Ø—O‘O qÑ(¨1Ñ,ØØØØ×*Ñ*ØØ!ô
ˆÔð Ð#Ü "§¡¨Ó 6× >Ñ >¸qÀ!À\Ó RˆDÕà $ˆDÔàÐ%Ü"$§(¡(¨>Ó":×"BÑ"BÀ1ÀaÈÓ"VˆDÕà"&ˆDÕr5   ÚwaveformÚattention_maskr   c                 ó  — |j                   dk(  rt        j                  |d¬«      }| j                  dkD  rO|| j                  t        j                  j
                  |j                  Ž j                  |j                  «      z  z   }| j                  dk7  r|| j                  z  }| j                  dz   }t        |d|| j                  ¬«      }| j                  dkD  r€| j                  rS|dd	d…f   d| j                  z
  z  }|ddd…f   | j                  |dd	d
…f   z  z
  }t        j                  ||gd¬«      }n*|ddd	…f   | j                  |dd	d…f   z  z
  }n	|dd	d…f   }|| j                   z  }t        j"                  j%                  || j&                  d¬«      }t        j(                  |«      }	t        j*                  |	| j,                  «      }
t        j.                  t        j0                  |
| j2                  «      «      }| j4                  �|| j4                  z
  }| j6                  �|| j6                  z  }|j9                  d«      }|d	d	| j                  …   j                  t:        «      }||d	|j                  d    fS )Ú r   r   )Úaxisç        r   r   )r7   r8   r9   .Nr   )Únrt   )r=   r   r#   rV   ÚrandomÚrandnr;   rh   r   rW   ra   rF   rb   rS   rT   Úconcatenateri   ÚfftÚrfftr   ÚabsÚmatmulrj   Úlogr%   rX   rY   rZ   ÚsqueezeÚbool)rl   rp   rq   Úframe_size_for_unfoldÚframes_to_processÚfirst_in_frameÚrest_in_frameÚframesÚstftÚmagnitude_specÚmel_specÚlog_mel_specÚmel_spectrogramÚmasks                 r3   Ú_extract_spectrogramz1Gemma3nAudioFeatureExtractor._extract_spectrogramÞ   sa  € à�=‰=˜AÒÜ—~‘~ h°QÔ7ˆHà�;‰;˜ÒØ $§+¡+´·	±	·±ÀÇÁÐ0P×0WÑ0WÐX`×XfÑXfÓ0gÑ"gÑgˆHà×"Ñ" cÒ)Ø $×"9Ñ"9Ñ9ˆHà $× 1Ñ 1°AÑ 5Ðô $ H¸ÐAVÐ]a×]lÑ]lÔmÐà×Ñ˜cÒ!Ø×*Ò*Ø!2°3¸¸¸°7Ñ!;¸sÀT×EUÑEUÑ?UÑ!V�Ø 1°#°q¸°t°)Ñ <¸t×?OÑ?OÐRcÐdgÐilÐjlÐilÐdlÑRmÑ?mÑ m�ÜŸ™¨¸Ð(GÈbÔQ‘à*¨3°±¨7Ñ3°d×6FÑ6FÐIZÐ[^Ð`cÐacÐ`cÐ[cÑIdÑ6dÑd‘à& s¨C¨R¨C xÑ0ˆFà˜$Ÿ+™+Ñ%ˆÜ�v‰v�{‰{˜6 T§_¡_¸2ˆ{Ó>ˆäŸ™ ›ˆä—9‘9˜^¨T×-=Ñ-=Ó>ˆÜ—v‘vœbŸj™j¨°4·>±>ÓBÓCˆà×ÑÐ(Ø'¨$×*;Ñ*;Ñ;ˆLà×ÑÐ*Ø'¨$×*=Ñ*=Ñ=ˆLà&×.Ñ.¨qÓ1ˆØÑ0 §¡Ð0Ñ1×8Ñ8¼Ó>ˆà Ð%? ×'<Ñ'<¸QÑ'?Ð @Ð@Ð@r5   Ú
raw_speechÚpaddingÚ
max_lengthÚ
truncationÚpad_to_multiple_ofÚreturn_tensorsc                 óÆ  — t        |t        j                  «      xr t        |j                  «      dkD  }	t        |t
        «      xr# t        |d   t        j                  t
        f«      }
|	xs |
}|s|g}|D �cg c]"  }t        j                  |g«      j                  ‘Œ$ }}| j                  t        d|i«      |||||¬«      }g }g }t        |j                  |j                  «      D ]c  \  }}| j                  |j                  |«      \  }}|j                  |j                  t        j                   «      «       |j                  |«       Œe t        ||dœ|¬«      S c c}w )a  Creates a batch of MEL spectrograms from the provided raw speech.

        This implementation uses a different algorithm for windowing and preemphasis compared to the built-in
        `transformers.audio_utils.spectrogram()` function that _will_ result in different outputs. Consider this
        carefully when selecting an audio feature extractor, especially with pre-trained models.

        Args:
            raw_speech:
                The audio for which MEL spectrograms are created.
            padding (`Union[bool, str, PaddingStrategy]`, *optional*, defaults to `"longest"`):
                The padding strategy to use for batches of audio with different lengths.
            max_length (`int`, *optional*, defaults to 480000):
                If provided, defines the maximum length of the audio to allow. Audio longer than this will be
                truncated if `truncation=True`.
            truncation (`bool`, *optional*, defaults to `True`):
                Whether or not to truncate audio above `max_length`.
            pad_to_multiple_of (`int`, *optional*, defaults to 128):
                When padding, pad to a multiple of this value. The default value is defined for optimal TPU support.
            return_tensors (`Union[str, TensorType]`, *optional*, defaults to `None`):
                The type of tensors to return (e.g., NumPy, or Torch).
            return_attention_mask (`bool`, *optional*, defaults to `True`):
                Whether to return the attention mask for the generated MEL spectrograms.
        r   r   rI   )rŽ   r�   r�   r‘   rN   )rI   rJ   )Útensor_type)Ú
isinstancer   ÚndarrayÚlenr;   r   ÚasarrayÚTÚpadr   ÚziprI   rq   rŒ   Úappendrh   r   )rl   r�   rŽ   r�   r�   r‘   r’   rN   rm   Úis_batched_numpyÚis_batched_sequenceÚ
is_batchedÚrsÚbatched_speechÚprepared_speechÚprepared_speech_maskÚspeechr‹   s                     r3   Ú__call__z%Gemma3nAudioFeatureExtractor.__call__  sX  € ôF & j´"·*±*Ó=Ò[Ä#Àj×FVÑFVÓBWÐZ[ÑB[ÐÜ(¨´XÓ>ÒtÄ:ÈjÐYZÉmÔ^`×^hÑ^hÔjrÐ]sÓCtÐØ%Ò<Ð)<ˆ
ñ Ø$˜ˆJØ3=Ö>¨R”b—j‘j " Ó&×(Ó(Ð>ˆ
Ð>àŸ™ÜÐ*¨JÐ7Ó8ØØ!Ø!Ø1Ø"7ð "ó 
ˆð ˆØ!ÐÜ × =Ñ =¸~×?\Ñ?\Ó]ò 	.‰LˆF�DØ×4Ñ4°V·X±X¸tÓD‰LˆF�DØ×"Ñ" 6§=¡=´·±Ó#<Ô=Ø ×'Ñ'¨Õ-ð	.ô
 Ø.ÐG[Ñ\Ø&ô
ð 	
ùò% ?s   Á9'E)é€   i€>  ru   Tg      @@g      $@g     @_@g     °½@g
×£p=
ï?TTru   r   gñhãˆµøä>NN)Úlongesti S Tr¦   NT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úmodel_input_namesr_   Úfloatr€   r   r^   r   r–   ÚtuplerŒ   ÚlistÚstrr   r   r   r¥   Ú__classcell__)ro   s   @r3   rH   rH   l   sÿ  ø„ ñ)ðV *Ð+@ÐAÐð  Ø#Ø"Ø&*Ø!%Ø#Ø$Ø%Ø!Ø'+Ø"ØØ$'ØØ/3Ø15ñ#B'àðB'ð ðB'ð ð	B'ð
  $ðB'ð ðB'ð ðB'ð ðB'ð ðB'ð ðB'ð !%ðB'ð ðB'ð ðB'ð "ðB'ð ðB'ð  ˜u‘o¨Ñ,ð!B'ð" ! ™¨$Ñ.õ#B'ðH+A¨R¯Z©Zð +AÈÏÉð +AÐX]Ð^`×^hÑ^hÐjl×jtÑjtÐ^tÑXuó +Að` 1:Ø!(ØØ),Ø26Ø-1ñ?
à—J‘J  e¡Ñ,¨t°B·J±JÑ/?Ñ?À$ÀtÈEÁ{ÑBSÑSð?
ð ˜‘˜oÑ-ð?
ð ˜$‘Jð	?
ð
 ð?
ð   $™Jð?
ð ˜jÑ(¨4Ñ/ð?
ð  $ d™{ð?
ð 
÷?
r5   rH   )N)r    Úcollections.abcr   Únumpyr   Ú!feature_extraction_sequence_utilsr   Úfeature_extraction_utilsr   Úutilsr   r   r	   Ú
get_loggerr¨   Úloggerr_   r­   r°   r–   r4   rF   rH   Ú__all__r\   r5   r3   ú<module>rº      sß   ðó Ý $ã å IÝ 4ß 9Ñ 9ð 
ˆ×	Ñ	˜HÓ	%€ð ñ:Øð:àð:ð ð:ð ð	:ð
 ð:ð ð:ð �‰*ð:ð ‡Z�Zó:ðz^�2—:‘:ð ^¨#ð ^°Sð ^Àð ^ÈÏ
É
ó ^ô&^
Ð#;ô ^
ðB *Ð
*�r5   