{"record":{"id":"ff784ef04190adb4","repo":"keras-team/keras","slug":"the-factor-argument-should-be-a-number-or-a-lis-ff784e","errorCode":null,"errorMessage":"The `factor` argument should be a number (or a list of two numbers) in the range [0, 1.0]. Received: input_number={input_number}","messagePattern":"The `factor` argument should be a number \\(or a list of two numbers\\) in the range \\[0, 1\\.0\\]\\. Received: input_number=(.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/layers/preprocessing/image_preprocessing/random_shear.py","lineNumber":138,"sourceCode":"                    + 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):\n        if input_number > 1.0 or input_number < 0.0:\n            raise ValueError(\n                self._FACTOR_VALIDATION_ERROR\n                + f\"Received: input_number={input_number}\"\n            )\n\n    def get_random_transformation(self, data, training=True, seed=None):\n        if not training:\n            return None\n\n        if isinstance(data, dict):\n            images = data[\"images\"]\n        else:\n            images = data\n\n        images_shape = self.backend.shape(images)\n        if len(images_shape) == 3:\n            batch_size = 1\n        else:\n            batch_size = images_shape[0]","sourceCodeStart":120,"sourceCodeEnd":156,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/layers/preprocessing/image_preprocessing/random_shear.py#L120-L156","documentation":"Raised by RandomShear's _check_factor_range when a shear factor value falls outside [0.0, 1.0]. Every element of the factor (or the scalar itself) must satisfy 0.0 <= x <= 1.0; shear magnitude is expressed as a fraction, not degrees.","triggerScenarios":"Calling RandomShear(factor=1.5), RandomShear(factor=(-0.2, 0.4)), or any 2-element list where one element is negative or greater than 1.0.","commonSituations":"Treating factor as degrees (e.g. passing 45 for a 45-degree shear) after migrating from torchvision or old tf.image code; flipping the sign convention used by RandomTranslation/RandomZoom which allow negatives.","solutions":["Scale the value into [0, 1.0] — for degrees d, use factor=d/360 or the appropriate fraction","Note negatives are not allowed here (unlike RandomTranslation): pass a positive magnitude, e.g. factor=0.2 gives [-0.2, 0.2]"],"exampleFix":"// before\nlayer = keras.layers.RandomShear(factor=25)  // degrees\n// after\nlayer = keras.layers.RandomShear(factor=25/360)","handlingStrategy":"validation","validationCode":"assert all(0.0 <= x <= 1.0 for x in (factor if isinstance(factor, (tuple, list)) else [factor])), 'shear factor must be within [0, 1.0]'","typeGuard":"def in_unit_range(x):\n    return isinstance(x, (int, float)) and 0.0 <= x <= 1.0","tryCatchPattern":"try:\n    layer = keras.layers.RandomShear(factor=factor)\nexcept ValueError:\n    factor = min(max(factor if isinstance(factor, (int, float)) else max(factor), 0.0), 1.0)\n    layer = keras.layers.RandomShear(factor=factor)","preventionTips":["Convert degree-based shear values to fractions of 360 before passing","Note this layer rejects negative factors, unlike RandomTranslation"],"tags":["keras","preprocessing","range-validation","augmentation"],"backgroundTag":"argument-out-of-range","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}