{"record":{"id":"73d380fbbc8b9a3f","repo":"keras-team/keras","slug":"the-factor-argument-should-be-a-number-or-a-lis","errorCode":null,"errorMessage":"The `factor` argument should be a number (or a list of two numbers) in the range [{self._FACTOR_BOUNDS[0]}, {self._FACTOR_BOUNDS[1]}]. Received: factor={factor}","messagePattern":"The `factor` argument should be a number \\(or a list of two numbers\\) in the range \\[(.+?), (.+?)\\]\\. Received: factor=(.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/layers/preprocessing/image_preprocessing/base_image_preprocessing_layer.py","lineNumber":39,"sourceCode":"            factor = factor or 0.0\n            self._set_factor(factor)\n        elif factor is not None:\n            raise ValueError(\n                f\"Layer {self.__class__.__name__} does not take \"\n                f\"a `factor` argument. Received: factor={factor}\"\n            )\n\n    def _set_factor(self, factor):\n        error_msg = (\n            \"The `factor` argument should be a number \"\n            \"(or a list of two numbers) \"\n            \"in the range \"\n            f\"[{self._FACTOR_BOUNDS[0]}, {self._FACTOR_BOUNDS[1]}]. \"\n            f\"Received: factor={factor}\"\n        )\n        if isinstance(factor, (tuple, list)):\n            if len(factor) != 2:\n                raise ValueError(error_msg)\n            if (\n                factor[0] > self._FACTOR_BOUNDS[1]\n                or factor[1] < self._FACTOR_BOUNDS[0]\n            ):\n                raise ValueError(error_msg)\n            lower, upper = sorted(factor)\n        elif isinstance(factor, (int, float)):\n            if (\n                factor < self._FACTOR_BOUNDS[0]\n                or factor > self._FACTOR_BOUNDS[1]\n            ):\n                raise ValueError(error_msg)\n            factor = abs(factor)\n            lower, upper = [max(-factor, self._FACTOR_BOUNDS[0]), factor]\n        else:\n            raise ValueError(error_msg)\n        self.factor = lower, upper\n","sourceCodeStart":21,"sourceCodeEnd":57,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/layers/preprocessing/image_preprocessing/base_image_preprocessing_layer.py#L21-L57","documentation":"When factor is a tuple/list, the base image preprocessing layer first checks it has exactly two elements. This instance of the shared error message is raised when the sequence length differs from 2, e.g. factor=[0.1, 0.2, 0.3] or factor=[0.5].","triggerScenarios":"Passing a list/tuple factor whose length is not 2 to a factor-based layer such as RandomContrast or Solarization.","commonSituations":"Generating factor ranges programmatically (e.g. a sweep of many values) and passing the whole list instead of picking endpoints.","solutions":["Pass exactly two values (lower, upper), e.g. factor=(0.1, 0.2).","Or pass a single float for a symmetric range, e.g. factor=0.2 means (-0.2, 0.2)."],"exampleFix":"# before\nlayer = keras.layers.RandomContrast(factor=[0.1, 0.2, 0.3])\n# after\nlayer = keras.layers.RandomContrast(factor=(0.1, 0.2))","handlingStrategy":"validation","validationCode":"if isinstance(factor, (tuple, list)):\n    assert len(factor) == 2, f\"factor sequence must have 2 elements, got {len(factor)}\"","typeGuard":"def is_valid_factor(f):\n    if isinstance(f, (int, float)):\n        return True\n    return isinstance(f, (tuple, list)) and len(f) == 2 and all(isinstance(x, (int, float)) for x in f)\n","tryCatchPattern":null,"preventionTips":["Pick factor endpoints explicitly rather than passing sweep arrays."],"tags":["keras","image-preprocessing","factor","invalid-argument"],"backgroundTag":"invalid-argument-shape","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}