{"record":{"id":"c968c26ffb0edade","repo":"tracel-ai/burn","slug":"unsupported-tensor-rank-for-optimizer-state-othe","errorCode":null,"errorMessage":"Unsupported tensor rank for optimizer state: {other}","messagePattern":"Unsupported tensor rank for optimizer state: (.+?)","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/burn-optim/src/optim/module/base.rs","lineNumber":126,"sourceCode":"                $body\n            }\n            5 => {\n                const $d: usize = 5;\n                $body\n            }\n            6 => {\n                const $d: usize = 6;\n                $body\n            }\n            7 => {\n                const $d: usize = 7;\n                $body\n            }\n            8 => {\n                const $d: usize = 8;\n                $body\n            }\n            other => panic!(\"Unsupported tensor rank for optimizer state: {other}\"),\n        }\n    };\n}\n\n/// Object-safe view over an [`Optimizer`], allowing [`ModuleOptimizer`](crate::optim::ModuleOptimizer)\n/// to stay non-generic. Rank-generic operations are dispatched on a runtime rank.\npub trait DynOptimizer: Send + Sync {\n    /// Perform an optimizer step for a single parameter of the given `rank`.\n    fn step_dyn(\n        &self,\n        rank: usize,\n        lr: LearningRate,\n        tensor: BridgeTensor,\n        grad: BridgeTensor,\n        state: Option<DynState>,\n    ) -> (BridgeTensor, Option<DynState>);\n\n    /// Move a state to the given device.","sourceCodeStart":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/tracel-ai/burn/blob/d16f7ba2ed0d41408189384044cc886fb4c8f957/crates/burn-optim/src/optim/module/base.rs#L108-L144","documentation":"burn-optim's optimizer state machinery is generated by a macro that only instantiates tensor ranks 1 through 8; any other rank hits the `other =>` catch-all and panics with 'Unsupported tensor rank for optimizer state'. The runtime rank of a parameter tensor is dispatched at runtime because the optimizer state view is non-generic over rank.","triggerScenarios":"Running an optimizer (e.g. Adam via ModuleOptimizer) whose adaptive state must be allocated for a parameter tensor with rank 0 (scalar) or rank > 8.","commonSituations":"Optimizing a scalar parameter (rank 0); extreme models with deeply nested, >8-dimensional tensors; custom modules exposing unusual parameter shapes into the optimizer state checkpoint path (burn-autodiff CheckpointerBuilder::extend flows state through this dispatch).","solutions":["Reshape the parameter to rank between 1 and 8 (e.g. wrap scalars as rank-1 tensors of length 1).","If rank > 8 is truly required, extend the rank-dispatch macro arms to cover the needed rank.","Split overly large multi-dimensional parameters into fewer-dimensional components."],"exampleFix":"// before\nlet w: Tensor<B, 1> = Tensor::from_floats([0.5]); // scalar-like state, ok\n// panic case: rank 9 tensor used as a parameter\n// after\nlet w = big_tensor.reshape([d1, d2, d3, d4, d5, d6, d7, d8]); // rank <= 8","handlingStrategy":"validation","validationCode":"fn optimizer_state_rank_ok(param_rank: usize) -> bool {\n    (1..=8).contains(&param_rank) // macro only instantiates ranks 1..=8\n}","typeGuard":null,"tryCatchPattern":"// validate parameter shapes before step()/checkpointing\nfor param in module.parameters() {\n    let rank = param.shape().dims().len();\n    assert!((1..=8).contains(&rank), \"parameter rank {rank} unsupported by optimizer state\");\n}","preventionTips":["Keep all trainable parameters at rank 1..=8; wrap scalars as rank-1 tensors.","Avoid >8-dimensional parameters; split them into multiple lower-rank parameters.","Add a startup pass that asserts every module parameter's rank is within 1..=8 before optimizer init."],"tags":["rust","panic","optimizer","tensor-rank","macro-dispatch"],"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"}