{"record":{"id":"b19c2ab5a93fcef9","repo":"huggingface/transformers","slug":"require-min-frequency-min-frequency-max-freq","errorCode":null,"errorMessage":"Require min_frequency: {min_frequency} <= max_frequency: {max_frequency}","messagePattern":"Require min_frequency: (.+?) <= max_frequency: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/transformers/audio_utils.py","lineNumber":698,"sourceCode":"            If `\"slaney\"`, divide the triangular mel weights by the width of the mel band (area normalization).\n        mel_scale (`str`, *optional*, defaults to `\"htk\"`):\n            The mel frequency scale to use, `\"htk\"`, `\"kaldi\"` or `\"slaney\"`.\n        triangularize_in_mel_space (`bool`, *optional*, defaults to `False`):\n            If this option is enabled, the triangular filter is applied in mel space rather than frequency space. This\n            should be set to `true` in order to get the same results as `torchaudio` when computing mel filters.\n\n    Returns:\n        `np.ndarray` of shape (`num_frequency_bins`, `num_mel_filters`): Triangular filter bank matrix. This is a\n        projection matrix to go from a spectrogram to a mel spectrogram.\n    \"\"\"\n    if norm is not None and norm != \"slaney\":\n        raise ValueError('norm must be one of None or \"slaney\"')\n\n    if num_frequency_bins < 2:\n        raise ValueError(f\"Require num_frequency_bins: {num_frequency_bins} >= 2\")\n\n    if min_frequency > max_frequency:\n        raise ValueError(f\"Require min_frequency: {min_frequency} <= max_frequency: {max_frequency}\")\n\n    # center points of the triangular mel filters\n    mel_min = hertz_to_mel(min_frequency, mel_scale=mel_scale)\n    mel_max = hertz_to_mel(max_frequency, mel_scale=mel_scale)\n    mel_freqs = np.linspace(mel_min, mel_max, num_mel_filters + 2)\n    filter_freqs = mel_to_hertz(mel_freqs, mel_scale=mel_scale)\n\n    if triangularize_in_mel_space:\n        # frequencies of FFT bins in Hz, but filters triangularized in mel space\n        fft_bin_width = sampling_rate / ((num_frequency_bins - 1) * 2)\n        fft_freqs = hertz_to_mel(fft_bin_width * np.arange(num_frequency_bins), mel_scale=mel_scale)\n        filter_freqs = mel_freqs\n    else:\n        # frequencies of FFT bins in Hz\n        fft_freqs = np.linspace(0, sampling_rate // 2, num_frequency_bins)\n\n    mel_filters = _create_triangular_filter_bank(fft_freqs, filter_freqs)\n","sourceCodeStart":680,"sourceCodeEnd":716,"githubUrl":"https://github.com/huggingface/transformers/blob/a597f974857b3d92939971296bc0deb93d33d780/src/transformers/audio_utils.py#L680-L716","documentation":"Thrown by `mel_filter_bank` when `min_frequency > max_frequency`. The triangular filters are distributed on the mel axis between these two bounds; an inverted or empty range makes filter placement impossible, so the function validates the ordering before computing anything.","triggerScenarios":"Calling `mel_filter_bank` with the two frequency bounds swapped (e.g. min_frequency=8000, max_frequency=0), equal-and-nonzero mismatch is fine but inverted values raise; commonly happens when both are taken from a config dict in the wrong order or when max_frequency defaults to 0 while min is set.","commonSituations":"Feature extractor configs where frequency_min/frequency_max keys were transcribed in reverse; specifying min_frequency without a matching max; porting configs between models whose parameter naming differs.","solutions":["Ensure min_frequency <= max_frequency (typically min ~20-0 Hz and max <= sampling_rate/2)","If values come from a config, print them before the call and fix the swapped keys","Double-check that max_frequency is actually set when you override min_frequency"],"exampleFix":"// before\nmel_filters = mel_filter_bank(num_frequency_bins=257, num_mel_filters=80, sampling_rate=16000, min_frequency=8000, max_frequency=0)  # ValueError\n\n// after\nmel_filters = mel_filter_bank(num_frequency_bins=257, num_mel_filters=80, sampling_rate=16000, min_frequency=0, max_frequency=8000)","handlingStrategy":"validation","validationCode":"if min_frequency > max_frequency:\n    raise ValueError(f\"min_frequency ({min_frequency}) must be <= max_frequency ({max_frequency})\")\nmel = mel_filter_bank(num_frequency_bins=257, num_mel_filters=80, sampling_rate=16000, min_frequency=min_frequency, max_frequency=max_frequency)","typeGuard":"def is_valid_freq_range(lo: float, hi: float, sr: int) -> bool:\n    return 0 <= lo <= hi <= sr / 2","tryCatchPattern":"try:\n    mel = mel_filter_bank(..., min_frequency=lo, max_frequency=hi)\nexcept ValueError as e:\n    if \"min_frequency\" in str(e):\n        lo, hi = min(lo, hi), max(lo, hi)  # auto-correct swapped bounds\n        mel = mel_filter_bank(..., min_frequency=lo, max_frequency=hi)\n    else:\n        raise","preventionTips":["Keep max_frequency <= sampling_rate/2 (Nyquist)","Order config keys deliberately and validate ranges after loading","Prefer sensible defaults (min 0-20 Hz, max 8000 Hz at 16 kHz)"],"tags":["audio","mel-spectrogram","argument-validation"],"backgroundTag":null,"analyzedSha":"a597f974857b3d92939971296bc0deb93d33d780","analyzedAt":"2026-08-14T18:24:08.354Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}