{"record":{"id":"bf627a5e31b92fbf","repo":"tracel-ai/burn","slug":"adaptive-avg-pool2d-backward-unsupported-dtype","errorCode":null,"errorMessage":"adaptive_avg_pool2d_backward: unsupported dtype {:?}","messagePattern":"adaptive_avg_pool2d_backward: unsupported dtype (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/burn-flex/src/ops/module.rs","lineNumber":418,"sourceCode":"        match x.dtype() {\n            DType::F32 => pool::adaptive_avg_pool2d_f32(x, output_size),\n            DType::F64 => pool::adaptive_avg_pool2d_f64(x, output_size),\n            DType::F16 => pool::adaptive_avg_pool2d_f16(x, output_size),\n            DType::BF16 => pool::adaptive_avg_pool2d_bf16(x, output_size),\n            dtype => panic!(\"adaptive_avg_pool2d: unsupported dtype {:?}\", dtype),\n        }\n    }\n\n    fn adaptive_avg_pool2d_backward(\n        x: FloatTensor<Flex>,\n        grad: FloatTensor<Flex>,\n    ) -> FloatTensor<Flex> {\n        match x.dtype() {\n            DType::F32 => pool::adaptive_avg_pool2d_backward_f32(x, grad),\n            DType::F64 => pool::adaptive_avg_pool2d_backward_f64(x, grad),\n            DType::F16 => pool::adaptive_avg_pool2d_backward_f16(x, grad),\n            DType::BF16 => pool::adaptive_avg_pool2d_backward_bf16(x, grad),\n            dtype => panic!(\n                \"adaptive_avg_pool2d_backward: unsupported dtype {:?}\",\n                dtype\n            ),\n        }\n    }\n\n    fn adaptive_avg_pool3d(x: FloatTensor<Flex>, output_size: [usize; 3]) -> FloatTensor<Flex> {\n        match x.dtype() {\n            DType::F32 => pool::adaptive_avg_pool3d_f32(x, output_size),\n            DType::F64 => pool::adaptive_avg_pool3d_f64(x, output_size),\n            DType::F16 => pool::adaptive_avg_pool3d_f16(x, output_size),\n            DType::BF16 => pool::adaptive_avg_pool3d_bf16(x, output_size),\n            dtype => panic!(\"adaptive_avg_pool3d: unsupported dtype {:?}\", dtype),\n        }\n    }\n\n    fn adaptive_avg_pool3d_backward(\n        x: FloatTensor<Flex>,","sourceCodeStart":400,"sourceCodeEnd":436,"githubUrl":"https://github.com/tracel-ai/burn/blob/d16f7ba2ed0d41408189384044cc886fb4c8f957/crates/burn-flex/src/ops/module.rs#L400-L436","documentation":"adaptive_avg_pool2d_backward dispatches on the input tensor's dtype across the four supported float types (F32, F64, F16, BF16). If x has any other dtype, the catch-all match arm panics with this message. It guards the backward (gradient) path of adaptive average pooling.","triggerScenarios":"Backpropagating through AdaptiveAvgPool2d on the Flex backend when the input tensor x (or its dtype slot) is not one of F32/F64/F16/BF16 — usually after an unintended integer cast upstream.","commonSituations":"Training a network where an integer tensor slipped into the pooling layer; checkpoint/precision mismatch; mixing Int tensors into a float compute graph.","solutions":["Cast x (and grad) to a supported float dtype, e.g. x.cast(DType::F32), before the backward pass.","Fix the dtype at the source so the forward pass already receives float tensors.","Add a match arm for the missing dtype in crates/burn-flex/src/ops/module.rs if support is required."],"exampleFix":"// before\nlet grad_in = grad_int; // wrong dtype\nlet backward = adaptive_avg_pool2d_backward::<F32>(x, grad_in); // panics\n// after\nlet backward = adaptive_avg_pool2d_backward::<F32>(x, grad_int.cast(DType::F32));","handlingStrategy":"validation","validationCode":"assert!(matches!(x.dtype(), burn::tensor::DType::F32 | burn::tensor::DType::F64 | burn::tensor::DType::F16 | burn::tensor::DType::BF16), \"adaptive_avg_pool2d_backward needs a float tensor, got {:?}\", x.dtype());","typeGuard":"fn is_float_dtype(d: burn::tensor::DType) -> bool {\n    matches!(d, burn::tensor::DType::F32 | burn::tensor::DType::F64 | burn::tensor::DType::F16 | burn::tensor::DType::BF16)\n}","tryCatchPattern":"// Validate/cast before invoking backward:\nlet x = if is_float_dtype(x.dtype()) { x } else { x.cast(burn::tensor::DType::F32) };","preventionTips":["Ensure the forward pass receives float tensors so backward state is float.","Cast gradients and saved inputs to a common float dtype before backward.","Add dtype assertions in training-loop debug checks."],"tags":["rust","dtype","panic","pooling","backward","burn"],"backgroundTag":"unsupported-dtype","analyzedSha":"d16f7ba2ed0d41408189384044cc886fb4c8f957","analyzedAt":"2026-09-05T13:19:14.260Z","contentChangedAt":"2026-09-05T13:19:14.260Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}