{"record":{"id":"4d14a8a3d1a0086f","repo":"huggingface/candle","slug":"pad-mode-reflect-is-not-supported-4d14a8","errorCode":null,"errorMessage":"pad-mode 'reflect' is not supported","messagePattern":"pad-mode 'reflect' is not supported","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"candle-transformers/src/models/mimi/conv.rs","lineNumber":226,"sourceCode":"}\n\nfn get_extra_padding_for_conv1d(\n    xs: &Tensor,\n    k_size: usize,\n    stride: usize,\n    padding_total: usize,\n) -> Result<usize> {\n    let len = xs.dim(D::Minus1)?;\n    let n_frames = (len + padding_total).saturating_sub(k_size) as f64 / stride as f64 + 1.0;\n    let ideal_len =\n        ((n_frames.ceil() as usize - 1) * stride + k_size).saturating_sub(padding_total);\n    Ok(ideal_len.saturating_sub(len))\n}\n\nfn pad1d(xs: &Tensor, pad_l: usize, pad_r: usize, mode: PadMode) -> Result<Tensor> {\n    match mode {\n        PadMode::Constant => xs.pad_with_zeros(D::Minus1, pad_l, pad_r),\n        PadMode::Reflect => candle::bail!(\"pad-mode 'reflect' is not supported\"),\n        PadMode::Replicate => xs.pad_with_same(D::Minus1, pad_l, pad_r),\n    }\n}\n\nfn unpad1d(xs: &Tensor, unpad_l: usize, unpad_r: usize) -> Result<Tensor> {\n    let len = xs.dim(D::Minus1)?;\n    if len < unpad_l + unpad_r {\n        candle::bail!(\"unpad1d: tensor len {len} is too low, {unpad_l} + {unpad_r}\")\n    }\n    xs.narrow(D::Minus1, unpad_l, len - (unpad_l + unpad_r))\n}\n\n#[derive(Debug, Clone)]\npub struct StreamableConv1d {\n    conv: NormConv1d,\n    causal: bool,\n    pad_mode: PadMode,\n    state_prev_xs: StreamTensor,","sourceCodeStart":208,"sourceCodeEnd":244,"githubUrl":"https://github.com/huggingface/candle/blob/d5fee525bfde3273eb7c9b75fd2bc4937be867ca/candle-transformers/src/models/mimi/conv.rs#L208-L244","documentation":"pad1d in the Mimi conv module supports Constant (zero-pad) and Replicate padding, but Reflect padding is not implemented in candle, so it bails when a layer's pad_mode is Reflect. The function is called from forward and step for each padded conv computation, so the error surfaces during inference.","triggerScenarios":"Running a Mimi model whose conv layers specify pad_mode = PadMode::Reflect; the failure occurs when forward or step invokes pad1d with that mode.","commonSituations":"Loading a Mimi/EnCodec checkpoint variant that used reflect padding; converting configs from PyTorch (where F.pad mode='reflect' exists) without adjusting to candle's supported modes.","solutions":["Set the conv config's pad_mode to PadMode::Constant or PadMode::Replicate","Use the standard Mimi checkpoint, which does not require reflect padding","Implement reflect padding in candle (e.g. via index flip and concat) if reflect semantics are required"],"exampleFix":"// before\nlet cfg = Conv1dConfig { pad_mode: PadMode::Reflect, .. };\n// after\nlet cfg = Conv1dConfig { pad_mode: PadMode::Replicate, .. };","handlingStrategy":"validation","validationCode":"if cfg.pad_mode == PadMode::Reflect {\n    return Err(\"candle mimi does not support reflect padding; use Constant or Replicate\");\n}","typeGuard":null,"tryCatchPattern":"let out = layer.forward(&xs)\n    .map_err(|e| format!(\"padding failed: {e}\"))?;","preventionTips":["Set pad_mode to Constant or Replicate when converting configs from PyTorch","Check pad_mode fields in codec configs before running inference","Add reflect padding support upstream if your checkpoints require it"],"tags":["rust","candle","mimi","audio","padding","unsupported-feature"],"backgroundTag":"unsupported-config-option","analyzedSha":"d5fee525bfde3273eb7c9b75fd2bc4937be867ca","analyzedAt":"2026-09-02T00:15:47.023Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T06:17:21.866Z"}