{"record":{"id":"08a67831d7743750","repo":"keras-team/keras","slug":"the-factor-argument-should-be-a-number-or-a-lis-08a678","errorCode":null,"errorMessage":"The `factor` argument should be a number (or a list of two numbers) in the range [0, 1.0]. Received: {factor_name}={factor}","messagePattern":"The `factor` argument should be a number \\(or a list of two numbers\\) in the range \\[0, 1\\.0\\]\\. Received: (.+?)=(.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/layers/preprocessing/image_preprocessing/random_shear.py","lineNumber":118,"sourceCode":"                f\"{self._SUPPORTED_FILL_MODE}.\"\n            )\n        if interpolation not in self._SUPPORTED_INTERPOLATION:\n            raise NotImplementedError(\n                f\"Unknown `interpolation` {interpolation}. Expected of one \"\n                f\"{self._SUPPORTED_INTERPOLATION}.\"\n            )\n\n        self.fill_mode = fill_mode\n        self.fill_value = fill_value\n        self.interpolation = interpolation\n        self.seed = seed\n        self.generator = SeedGenerator(seed)\n        self.supports_jit = False\n\n    def _set_factor_with_name(self, factor, factor_name):\n        if isinstance(factor, (tuple, list)):\n            if len(factor) != 2:\n                raise ValueError(\n                    self._FACTOR_VALIDATION_ERROR\n                    + f\"Received: {factor_name}={factor}\"\n                )\n            self._check_factor_range(factor[0])\n            self._check_factor_range(factor[1])\n            lower, upper = sorted(factor)\n        elif isinstance(factor, (int, float)):\n            self._check_factor_range(factor)\n            factor = abs(factor)\n            lower, upper = [-factor, factor]\n        else:\n            raise ValueError(\n                self._FACTOR_VALIDATION_ERROR\n                + f\"Received: {factor_name}={factor}\"\n            )\n        return lower, upper\n\n    def _check_factor_range(self, input_number):","sourceCodeStart":100,"sourceCodeEnd":136,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/layers/preprocessing/image_preprocessing/random_shear.py#L100-L136","documentation":"Raised by RandomShear's constructor when the `factor` argument is a tuple or list whose length is not exactly 2. Keras expects either a single float in [0, 1.0] or a pair [lower, upper] defining the shear range; any other sequence length is rejected immediately at layer construction.","triggerScenarios":"Calling layers.RandomShear(factor=[0.1, 0.2, 0.3]) or RandomShear(factor=(0.2,)) — any tuple/list with len != 2 passed to __init__ via _set_factor_with_name.","commonSituations":"Copying a config from an augmentation pipeline that used three values, passing a numpy array of shape (3,), or passing a nested list from a YAML/JSON hyperparameter file.","solutions":["Pass a single number, e.g. RandomShear(factor=0.2)","Pass exactly two numbers as lower/upper bounds, e.g. RandomShear(factor=(0.1, 0.5))"],"exampleFix":"// before\nlayer = keras.layers.RandomShear(factor=[0.1, 0.2, 0.3])\n// after\nlayer = keras.layers.RandomShear(factor=(0.1, 0.3))","handlingStrategy":"validation","validationCode":"def valid_shear_factor(f):\n    if isinstance(f, (int, float)):\n        return 0.0 <= f <= 1.0\n    return isinstance(f, (tuple, list)) and len(f) == 2 and all(isinstance(x, (int, float)) and 0.0 <= x <= 1.0 for x in f)","typeGuard":"def is_shear_factor(f) -> bool:\n    return (isinstance(f, (int, float)) and 0.0 <= f <= 1.0) or (\n        isinstance(f, (tuple, list)) and len(f) == 2\n        and all(isinstance(x, (int, float)) and 0.0 <= x <= 1.0 for x in f)\n    )","tryCatchPattern":"try:\n    layer = keras.layers.RandomShear(factor=f)\nexcept ValueError as e:\n    raise ValueError(f\"Invalid shear factor from config: {f!r}\") from e","preventionTips":["Validate config-supplied augmentation factors against the [0, 1.0] rule before building the model","Remember RandomShear takes fractions, not degrees, and does not accept negative factors"],"tags":["keras","preprocessing","augmentation","validation"],"backgroundTag":"constructor-argument-validation","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}