{"record":{"id":"5242c4db4ee167d3","repo":"Lightning-AI/pytorch-lightning","slug":"mismatch-in-number-of-limits-len-limits-and-n-5242c4","errorCode":null,"errorMessage":"Mismatch in number of limits ({len(limits)}) and number of iterables ({len(self.flattened)})","messagePattern":"Mismatch in number of limits \\((.+?)\\) and number of iterables \\((.+?)\\)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/lightning/pytorch/utilities/combined_loader.py","lineNumber":334,"sourceCode":"        if len(flattened) != len(self._flattened):\n            raise ValueError(\n                f\"Mismatch in flattened length ({len(flattened)}) and existing length ({len(self._flattened)})\"\n            )\n        # update the iterable collection\n        self._iterables = tree_unflatten(flattened, self._spec)\n        self._flattened = flattened\n\n    @property\n    def limits(self) -> Optional[list[Union[int, float]]]:\n        \"\"\"Optional limits per iterator.\"\"\"\n        return self._limits\n\n    @limits.setter\n    def limits(self, limits: Optional[Union[int, float, list[Union[int, float]]]]) -> None:\n        if isinstance(limits, (int, float)):\n            limits = [limits] * len(self.flattened)\n        elif isinstance(limits, list) and len(limits) != len(self.flattened):\n            raise ValueError(\n                f\"Mismatch in number of limits ({len(limits)}) and number of iterables ({len(self.flattened)})\"\n            )\n        self._limits = limits\n\n    def __next__(self) -> _ITERATOR_RETURN:\n        assert self._iterator is not None\n        out = next(self._iterator)\n        if isinstance(self._iterator, _Sequential):\n            return out\n        out, batch_idx, dataloader_idx = out\n        return tree_unflatten(out, self._spec), batch_idx, dataloader_idx\n\n    @override\n    def __iter__(self) -> Self:\n        cls = _SUPPORTED_MODES[self._mode][\"iterator\"]\n        iterator = cls(self.flattened, self._limits)\n        iter(iterator)\n        self._iterator = iterator","sourceCodeStart":316,"sourceCodeEnd":352,"githubUrl":"https://github.com/Lightning-AI/pytorch-lightning/blob/9fed5c27d2a62ff0efd6c3573599921d6ff67c14/src/lightning/pytorch/utilities/combined_loader.py#L316-L352","documentation":"The CombinedLoader.limits setter accepts a scalar (broadcast to all loaders) or a list matching the number of flattened iterables; a list of any other length raises ValueError.","triggerScenarios":"combined_loader.limits = [0.5, 0.5] when there are 3 dataloaders.","commonSituations":"Percent-based limits hardcoded for a different number of loaders; loaders added dynamically.","solutions":["Pass a scalar: cl.limits = 0.5","Ensure len(limits) == len(cl.flattened)"],"exampleFix":"# before\ncl.limits = [0.5, 0.5]\n# after\ncl.limits = 0.5  # applies to all loaders","handlingStrategy":"validation","validationCode":"if isinstance(limits, list):\n    assert len(limits) == len(cl.flattened)\nelse:  # scalar is fine\n    pass","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use a scalar limit unless per-loader control is truly needed"],"tags":["combined-loader","limits","length-mismatch"],"backgroundTag":"length-mismatch","analyzedSha":"9fed5c27d2a62ff0efd6c3573599921d6ff67c14","analyzedAt":"2026-08-28T11:52:41.083Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}