{"record":{"id":"e598375c3a72d4ce","repo":"keras-team/keras","slug":"the-value-range-argument-should-be-a-list-of-two","errorCode":null,"errorMessage":"The `value_range` argument should be a list of two numbers. Received: value_range={value_range}","messagePattern":"The `value_range` argument should be a list of two numbers\\. Received: value_range=(.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/layers/preprocessing/image_preprocessing/auto_contrast.py","lineNumber":51,"sourceCode":"        \"The `value_range` argument should be a list of two numbers. \"\n    )\n\n    def __init__(\n        self,\n        value_range=(0, 255),\n        **kwargs,\n    ):\n        super().__init__(**kwargs)\n        self._set_value_range(value_range)\n\n    def _set_value_range(self, value_range):\n        if not isinstance(value_range, (tuple, list)):\n            raise ValueError(\n                self._VALUE_RANGE_VALIDATION_ERROR\n                + f\"Received: value_range={value_range}\"\n            )\n        if len(value_range) != 2:\n            raise ValueError(\n                self._VALUE_RANGE_VALIDATION_ERROR\n                + f\"Received: value_range={value_range}\"\n            )\n        self.value_range = sorted(value_range)\n\n    def transform_images(self, images, transformation=None, training=True):\n        original_images = images\n        images = self._transform_value_range(\n            images,\n            original_range=self.value_range,\n            target_range=(0, 255),\n            dtype=self.compute_dtype,\n        )\n\n        images = self.backend.cast(images, self.compute_dtype)\n        low = self.backend.numpy.min(images, axis=(1, 2), keepdims=True)\n        high = self.backend.numpy.max(images, axis=(1, 2), keepdims=True)\n        scale = 255.0 / (high - low)","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/layers/preprocessing/image_preprocessing/auto_contrast.py#L33-L69","documentation":"The value_range argument of AutoContrast must contain exactly two numbers (the minimum and maximum pixel values of the input). After confirming it is a tuple/list, the layer checks len(value_range) == 2 and raises this ValueError for lists of any other length; the accepted pair is stored sorted.","triggerScenarios":"Passing value_range=(0,), value_range=[0, 128, 255], or an empty list.","commonSituations":"Building value_range dynamically (e.g. from per-channel normalization statistics that yield three values) and passing it straight to the layer.","solutions":["Pass exactly two numbers, e.g. (0, 255).","If you computed per-channel ranges, reduce them to a single global (min, max) pair before passing them in."],"exampleFix":"# before\nlayer = keras.layers.AutoContrast(value_range=[0, 128, 255])\n# after\nlayer = keras.layers.AutoContrast(value_range=(0, 255))","handlingStrategy":"validation","validationCode":"assert len(value_range) == 2, f\"value_range must have 2 elements, got {len(value_range)}\"","typeGuard":"def is_valid_value_range(v):\n    return isinstance(v, (tuple, list)) and len(v) == 2 and all(isinstance(x, (int, float)) for x in v)\n","tryCatchPattern":null,"preventionTips":["When computing ranges dynamically, assert length 2 before layer construction."],"tags":["keras","image-preprocessing","auto-contrast","invalid-argument"],"backgroundTag":"invalid-argument-shape","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}