{"record":{"id":"aee3fa38402fd00e","repo":"tracel-ai/burn","slug":"adaptive-avg-pool2d-unsupported-dtype","errorCode":null,"errorMessage":"adaptive_avg_pool2d: unsupported dtype {:?}","messagePattern":"adaptive_avg_pool2d: unsupported dtype (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/burn-flex/src/ops/module.rs","lineNumber":405,"sourceCode":"            DType::BF16 => pool::avg_pool2d_backward_bf16(\n                x,\n                grad,\n                kernel_size,\n                stride,\n                padding,\n                count_include_pad,\n            ),\n            dtype => panic!(\"avg_pool2d_backward: unsupported dtype {:?}\", dtype),\n        }\n    }\n\n    fn adaptive_avg_pool2d(x: FloatTensor<Flex>, output_size: [usize; 2]) -> FloatTensor<Flex> {\n        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    }","sourceCodeStart":387,"sourceCodeEnd":423,"githubUrl":"https://github.com/tracel-ai/burn/blob/d16f7ba2ed0d41408189384044cc886fb4c8f957/crates/burn-flex/src/ops/module.rs#L387-L423","documentation":"adaptive_avg_pool2d in the burn-flex backend matches on the input tensor's dtype and only dispatches to the F32/F64/F16/BF16 kernel variants. Any other dtype hits the catch-all arm and panics. The backend deliberately fails fast instead of silently misinterpreting data.","triggerScenarios":"Calling adaptive_avg_pool2d (via Tensor::adaptive_avg_pool2d) on the Flex backend with a tensor whose dtype is not F32/F64/F16/BF16, e.g. an Int or Bool tensor.","commonSituations":"Feeding integer-encoded images or labels directly into an adaptive pooling layer; a preprocessing pipeline that forgot .float(); dtype drift after loading a model with a different precision config.","solutions":["Cast the input to a supported float dtype before the call: x.cast(DType::F32).","Audit the pipeline producing the tensor so float dtype is guaranteed at the pooling layer.","Add the missing dtype arm (pool::adaptive_avg_pool2d_<dtype>) in crates/burn-flex/src/ops/module.rs if the backend should support it."],"exampleFix":"// before\nlet out = x_int.adaptive_avg_pool2d([1, 1]); // panics\n// after\nlet out = x_int.cast(DType::F32).adaptive_avg_pool2d([1, 1]);","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 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":"// Panic-based; guard before the call:\nlet x = if is_float_dtype(x.dtype()) { x } else { x.cast(burn::tensor::DType::F32) };\nlet out = x.adaptive_avg_pool2d([1, 1]);","preventionTips":["Convert integer image/label tensors to float in the preprocessing pipeline.","Assert input dtype in unit tests around pooling layers.","Avoid int_cast on tensors destined for float compute paths."],"tags":["rust","dtype","panic","pooling","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"}