{"record":{"id":"2ad12fa15addacd0","repo":"keras-team/keras","slug":"received-input-number-input-number","errorCode":null,"errorMessage":"Received: input_number={input_number}","messagePattern":"Received: input_number=(.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/layers/preprocessing/image_preprocessing/random_translation.py","lineNumber":169,"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 < -1.0:\n            raise ValueError(\n                self._FACTOR_VALIDATION_ERROR\n                + f\"Received: input_number={input_number}\"\n            )\n\n    def _transform_images(self, images, transformation, interpolation):\n        return self._translate_inputs(images, transformation, interpolation)\n\n    def transform_labels(self, labels, transformation, training=True):\n        return labels\n\n    def get_transformed_x_y(self, x, y, transform):\n        a0, a1, a2, b0, b1, b2, c0, c1 = self.backend.numpy.split(\n            transform, 8, axis=-1\n        )\n\n        k = c0 * x + c1 * y + 1\n        x_transformed = (a0 * x + a1 * y + a2) / k\n        y_transformed = (b0 * x + b1 * y + b2) / k","sourceCodeStart":151,"sourceCodeEnd":187,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/layers/preprocessing/image_preprocessing/random_translation.py#L151-L187","documentation":"Raised by RandomTranslation's _check_factor_range when a translation factor falls outside [-1.0, 1.0]. Translation is expressed as a fraction of the image dimension, so 100% is the maximum in either direction.","triggerScenarios":"Calling RandomTranslation(height_factor=1.5, width_factor=0.1), or a pair like (-1.2, 0.3).","commonSituations":"Passing pixel counts instead of fractions (e.g. 50 for 50 pixels on a 100px image); confusing the sign conventions with RandomShear (which forbids negatives).","solutions":["Divide pixel offsets by the image size to get a fraction","Keep values in [-1.0, 1.0]; note negative scalars are fine here and become symmetric ranges"],"exampleFix":"// before\nlayer = RandomTranslation(height_factor=50, width_factor=50)  // meant pixels\n// after\nlayer = RandomTranslation(height_factor=50/224, width_factor=50/224)","handlingStrategy":"validation","validationCode":"vals = factor if isinstance(factor, (tuple, list)) else [factor]\nassert all(-1.0 <= x <= 1.0 for x in vals), 'translation factors must be in [-1.0, 1.0]'","typeGuard":"def in_translation_range(x):\n    return isinstance(x, (int, float)) and -1.0 <= x <= 1.0","tryCatchPattern":"try:\n    layer = RandomTranslation(h, w)\nexcept ValueError:\n    h = max(-1.0, min(1.0, h / img_size))\n    layer = RandomTranslation(h, w)","preventionTips":["Always express translation as a fraction of image size","Compute fractions from pixel offsets: pixels / image_dimension"],"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"}