{"record":{"id":"973d1b19366d9b3b","repo":"Lightning-AI/pytorch-lightning","slug":"mode-should-be-either-of-self-supported-modes-973d1b","errorCode":null,"errorMessage":"`mode` should be either of {self.SUPPORTED_MODES}","messagePattern":"`mode` should be either of (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/lightning/pytorch/callbacks/lr_finder.py","lineNumber":104,"sourceCode":"\n    \"\"\"\n\n    SUPPORTED_MODES = (\"linear\", \"exponential\")\n\n    def __init__(\n        self,\n        min_lr: float = 1e-8,\n        max_lr: float = 1,\n        num_training_steps: int = 100,\n        mode: str = \"exponential\",\n        early_stop_threshold: Optional[float] = 4.0,\n        update_attr: bool = True,\n        attr_name: str = \"\",\n        weights_only: Optional[bool] = None,\n    ) -> None:\n        mode = mode.lower()\n        if mode not in self.SUPPORTED_MODES:\n            raise ValueError(f\"`mode` should be either of {self.SUPPORTED_MODES}\")\n\n        self._min_lr = min_lr\n        self._max_lr = max_lr\n        self._num_training_steps = num_training_steps\n        self._mode = mode\n        self._early_stop_threshold = early_stop_threshold\n        self._update_attr = update_attr\n        self._attr_name = attr_name\n        self._weights_only = weights_only\n\n        self._early_exit = False\n        self.optimal_lr: Optional[_LRFinder] = None\n\n    def lr_find(self, trainer: \"pl.Trainer\", pl_module: \"pl.LightningModule\") -> None:\n        with isolate_rng():\n            self.optimal_lr = _lr_find(\n                trainer,\n                pl_module,","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/pytorch/callbacks/lr_finder.py#L86-L122","documentation":"_LRFinder (used by `lr_finder(runner)(model, ...)` / Tuner's lr_find) accepts only `mode='exponential'` or `mode='linear'` (case-insensitive) for the learning-rate sweep. Any other value raises ValueError after lowercasing the input.","triggerScenarios":"Calling the lr_find runner with `mode='log'`, `mode='Exponential '` (whitespace), or a typo like `mode='expo'`. The value is lowercased first, so 'EXPONENTIAL' works but 'logarithmic' does not.","commonSituations":"Assuming a log-scale option under a different name; passing mode from a config with whitespace or a typo; older code using names from other libraries.","solutions":["Use exactly 'exponential' (default) or 'linear'","Trim/normalize config strings: `mode.strip().lower()`","For log-scale sweeps, use 'exponential', which multiplies the lr by a factor each step"],"exampleFix":"# before\nlr_find(model, mode='log')\n# after\nlr_find(model, mode='exponential')","handlingStrategy":"type-guard","validationCode":"mode = mode.strip().lower()\nassert mode in ('exponential', 'linear')","typeGuard":"def is_valid_lr_find_mode(mode: str) -> bool:\n    return isinstance(mode, str) and mode.strip().lower() in ('exponential', 'linear')","tryCatchPattern":null,"preventionTips":["Normalize mode strings from configs before passing to lr_find","Remember 'exponential' is the log-scale sweep"],"tags":["lightning","lr-finder","invalid-argument","hyperparameter-tuning"],"backgroundTag":"invalid-config-value","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}