keras-team/keras · error · ValueError

`mode` argument value not supported. Expected one of

Error message

`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode={mode}

What it means

Argument validation in the NumPy backend's `qr`: the `mode` argument selects between the reduced QR decomposition (R is m x n) and the complete one (R is m x m, Q is m x m), so only 'reduced' and 'complete' are accepted. Any other value — e.g. numpy's legacy 'r' or 'raw' modes or a misspelling — fails the set-membership guard and is rejected naming the received mode.

Solutions

  1. Use mode='reduced' (default) or mode='complete'
  2. Wrap scipy/numpy directly if you need non-standard QR modes not exposed by this op
  3. Check for misspelled or legacy mode strings in code migrated from raw numpy.linalg.qr
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at keras/src/backend/numpy/ops/linalg.py:65 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of keras-team/keras@7a34a03db6 (2026-08-25). Data as JSON: /api/errors/47142672a11b5b52. Report an issue: GitHub.

Appendix: source

Thrown at keras/src/backend/numpy/ops/linalg.py:65

        sl.lu_factor,
        signature=signature,
    )
    return _lu_factor_gufunc(a)


def norm(x, ord=None, axis=None, keepdims=False):
    x = convert_to_tensor(x)
    dtype = standardize_dtype(x.dtype)
    if "int" in dtype or dtype == "bool":
        dtype = dtypes.result_type(x.dtype, "float32")
    return np.linalg.norm(x, ord=ord, axis=axis, keepdims=keepdims).astype(
        dtype
    )


def qr(x, mode="reduced"):
    if mode not in {"reduced", "complete"}:
        raise ValueError(
            "`mode` argument value not supported. "
            "Expected one of {'reduced', 'complete'}. "
            f"Received: mode={mode}"
        )
    return np.linalg.qr(x, mode=mode)


def solve(a, b):
    return np.linalg.solve(a, b)


def solve_triangular(a, b, lower=False):
    if a.ndim == 2:
        return sl.solve_triangular(a, b, lower=lower)

    _vectorized_solve_triangular = np.vectorize(
        lambda a, b: sl.solve_triangular(a, b, lower=lower),
        signature="(n,n),(n,m)->(n,m)",

View on GitHub (pinned to 7a34a03db6)