{"record":{"id":"903d41bb577d8ef4","repo":"keras-team/keras","slug":"invalid-ord-argument-for-vector-norm-received-903d41","errorCode":null,"errorMessage":"Invalid `ord` argument for vector norm. Received: ord={self.ord}","messagePattern":"Invalid `ord` argument for vector norm\\. Received: ord=(.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"keras/src/ops/linalg.py","lineNumber":309,"sourceCode":"                    f\"Received: ord={ord}\"\n                )\n        if isinstance(axis, int):\n            axis = [axis]\n        self.ord = ord\n        self.axis = axis\n        self.keepdims = keepdims\n\n    def compute_output_spec(self, x):\n        output_dtype = backend.standardize_dtype(x.dtype)\n        if \"int\" in output_dtype or output_dtype == \"bool\":\n            output_dtype = backend.floatx()\n        if self.axis is None:\n            axis = tuple(range(len(x.shape)))\n        else:\n            axis = self.axis\n        num_axes = len(axis)\n        if num_axes == 1 and isinstance(self.ord, str):\n            raise ValueError(\n                \"Invalid `ord` argument for vector norm. \"\n                f\"Received: ord={self.ord}\"\n            )\n        elif num_axes == 2 and self.ord not in (\n            None,\n            \"fro\",\n            \"nuc\",\n            float(\"inf\"),\n            float(\"-inf\"),\n            1,\n            -1,\n            2,\n            -2,\n        ):\n            raise ValueError(\n                \"Invalid `ord` argument for matrix norm. \"\n                f\"Received: ord={self.ord}\"\n            )","sourceCodeStart":291,"sourceCodeEnd":327,"githubUrl":"https://github.com/keras-team/keras/blob/7a34a03db60bf60042242d6a556fc3be119046a5/keras/src/ops/linalg.py#L291-L327","documentation":"Norm.compute_output_spec checks that string ords ('fro'/'nuc') are only used when the reduction spans 2 axes (a matrix). If axis is None or resolves to a single axis (a vector), a string ord is meaningless and this error is raised.","triggerScenarios":"keras.ops.linalg.norm(vector, ord='fro'); Norm(axis=1, ord='nuc') applied to a batch of vectors.","commonSituations":"Writing generic norm code that passes ord='fro' for all inputs; switching a norm call from full-matrix to per-row reduction without updating ord.","solutions":["For vector norms use ord=None or numeric ords (1, 2, inf).","Restrict 'fro'/'nuc' to axis settings covering exactly 2 dimensions.","Branch on tensor rank: strings only when len(axis) == 2."],"exampleFix":"# before\nrow_norms = keras.ops.linalg.norm(X, ord='fro', axis=1)\n\n# after\nrow_norms = keras.ops.linalg.norm(X, ord=2, axis=1)","handlingStrategy":"validation","validationCode":"axes = tuple(range(len(x.shape))) if axis is None else (axis,)\nif len(axes) == 1:\n    assert not isinstance(ord, str), 'string ord only valid for 2-axis norms'","typeGuard":"def norm_args_consistent(x, ord, axis):\n    axes = tuple(range(len(x.shape))) if axis is None else (axis,)\n    return not (len(axes) == 1 and isinstance(ord, str))","tryCatchPattern":null,"preventionTips":["Reserve 'fro'/'nuc' for matrix norms only.","Switch to ord=2 when reducing to per-row vector norms."],"tags":["keras","linalg","norm","argument-validation"],"backgroundTag":"argument-validation-failed","analyzedSha":"7a34a03db60bf60042242d6a556fc3be119046a5","analyzedAt":"2026-08-25T21:25:25.994Z","schemaVersion":2},"datasetVersion":"2026-08-26T02:17:13.382Z"}