{"record":{"id":"ed1e6a4a9669b32c","repo":"tracel-ai/burn","slug":"dim-not-supported-ndims","errorCode":null,"errorMessage":"Dim not supported {ndims}","messagePattern":"Dim not supported (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/burn-ndarray/src/ops/base.rs","lineNumber":1017,"sourceCode":"\n    /// Mean of all elements - zero-copy for borrowed storage.\n    pub fn mean_view(view: ArrayView<'_, E, IxDyn>) -> SharedArray<E> {\n        // `ndarray::mean` returns `None` for an empty view.\n        let mean = view.mean().unwrap_or_else(empty_mean);\n        ArrayD::from_elem(IxDyn(&[1]), mean).into_shared()\n    }\n\n    /// Product of all elements - zero-copy for borrowed storage.\n    pub fn prod_view(view: ArrayView<'_, E, IxDyn>) -> SharedArray<E> {\n        let prod = view.iter().fold(E::one(), |acc, &x| acc * x);\n        ArrayD::from_elem(IxDyn(&[1]), prod).into_shared()\n    }\n\n    pub fn mean_dim(tensor: SharedArray<E>, dim: usize) -> SharedArray<E> {\n        let ndims = tensor.shape().num_dims();\n        match ndims {\n            d if (1..=6).contains(&d) => keepdim!(dim, tensor, mean),\n            _ => panic!(\"Dim not supported {ndims}\"),\n        }\n    }\n\n    pub fn sum_dim(tensor: SharedArray<E>, dim: usize) -> SharedArray<E> {\n        let ndims = tensor.shape().num_dims();\n        match ndims {\n            d if (1..=6).contains(&d) => keepdim!(dim, tensor, sum),\n            _ => panic!(\"Dim not supported {ndims}\"),\n        }\n    }\n\n    pub fn prod_dim(tensor: SharedArray<E>, dim: usize) -> SharedArray<E> {\n        let ndims = tensor.shape().num_dims();\n        match ndims {\n            d if (1..=6).contains(&d) => keepdim!(dim, tensor, prod),\n            _ => panic!(\"Dim not supported {ndims}\"),\n        }\n    }","sourceCodeStart":999,"sourceCodeEnd":1035,"githubUrl":"https://github.com/tracel-ai/burn/blob/d16f7ba2ed0d41408189384044cc886fb4c8f957/crates/burn-ndarray/src/ops/base.rs#L999-L1035","documentation":"mean_dim reduces a tensor along a dimension and keeps dims; the ndarray backend's keepdim! macro only supports tensors with 1 to 6 dimensions. Calling mean_dim on a tensor with 0 or more than 6 dimensions panics with 'Dim not supported'.","triggerScenarios":"Calling Tensor::mean_dim (or mean along dim) on a rank-7+ tensor or a scalar (rank 0).","commonSituations":"Very deep nested inputs (e.g. video + batch + channels + extra axes) exceeding 6 dims; accidentally passing nested Vec structures that produce extra dimensions; scalar tensors from squeezing all dims.","solutions":["Reduce the number of tensor dimensions to 6 or fewer by reshaping or merging axes.","Use the burn-tch or burn-cubecl backends if higher-rank support is needed.","Ensure you haven't accidentally added extra dimensions when constructing the tensor.","Check tensor.dims().len() before calling mean_dim."],"exampleFix":"// before\nlet t: Tensor<_,_,NdArray> = ...; // shape [2,2,2,2,2,2,2] (7 dims)\nlet m = t.mean_dim(0);\n// after\nlet t = t.reshape([2, 4, 2, 2, 2, 2]); // merge two axes -> 6 dims\nlet m = t.mean_dim(0);","handlingStrategy":"validation","validationCode":"assert!((1..=6).contains(&tensor.dims().len()), \"mean_dim supports rank 1-6\");","typeGuard":"fn mean_dim_supported(t: &[usize]) -> bool { (1..=6).contains(&t.len()) }","tryCatchPattern":null,"preventionTips":["Keep tensors at 6 or fewer dims in ndarray backend","Merge axes with reshape before reductions","Check rank after any op that may add dimensions"],"tags":["rust","burn","dimension-limit","ndarray"],"backgroundTag":"unsupported-tensor-rank","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"}