{"record":{"id":"247b54442ea4cad7","repo":"jax-ml/jax","slug":"invalid-trans-value-trans","errorCode":null,"errorMessage":"Invalid 'trans' value {trans}","messagePattern":"Invalid 'trans' value (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"jax/_src/scipy/linalg.py","lineNumber":1279,"sourceCode":"    Array(True, dtype=bool)\n  \"\"\"\n  del overwrite_a, overwrite_b, debug, check_finite  #unused\n  valid_assume_a = ['gen', 'sym', 'her', 'pos']\n  if assume_a not in valid_assume_a:\n    raise ValueError(f\"Expected assume_a to be one of {valid_assume_a}; got {assume_a!r}\")\n  return _solve(a, b, assume_a, lower)\n\n@jit(static_argnames=('trans', 'lower', 'unit_diagonal'))\ndef _solve_triangular(a: ArrayLike, b: ArrayLike, trans: int | str,\n                      lower: bool, unit_diagonal: bool) -> Array:\n  if trans == 0 or trans == \"N\":\n    transpose_a, conjugate_a = False, False\n  elif trans == 1 or trans == \"T\":\n    transpose_a, conjugate_a = True, False\n  elif trans == 2 or trans == \"C\":\n    transpose_a, conjugate_a = True, True\n  else:\n    raise ValueError(f\"Invalid 'trans' value {trans}\")\n\n  a, b = promote_dtypes_inexact(jnp.asarray(a), jnp.asarray(b))\n\n  if b.ndim == 1:\n    signature = \"(n,n),(n)->(n)\"\n  elif a.ndim == b.ndim + 1 and a.shape[-1] == b.shape[-1]:\n    # Deprecation warning added 2026-03-23\n    warnings.warn(\n        \"jax.scipy.linalg.solve_triangular: batched 1D solves with b.ndim > 1 \"\n        \"are deprecated, and in the future will be treated as a batched 2D solve. \"\n        \"Use solve_triangular(a, b[..., None]).squeeze(-1) to avoid this warning.\",\n        category=FutureWarning)\n    signature = \"(n,n),(n)->(n)\"\n  else:\n    signature = \"(n,n),(n,k)->(n,k)\"\n\n  return jnp_vectorize.vectorize(\n      partial(lax_linalg.triangular_solve, left_side=True, lower=lower,","sourceCodeStart":1261,"sourceCodeEnd":1297,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/scipy/linalg.py#L1261-L1297","documentation":"jax.scipy.linalg.solve_triangular accepts trans as 0/'N' (no transpose), 1/'T' (transpose), or 2/'C' (conjugate transpose). Any other value raises ValueError. Note these are the only accepted spellings — lowercase 't'/'n'/'c' or 'TP' etc. are rejected.","triggerScenarios":"Calling solve_triangular(a, b, trans='t'), trans='N ', trans=3, or trans=True.","commonSituations":"Porting scipy.linalg.solve_triangular code that passed trans=0/1/2 ints but accidentally changed to a different encoding; mixing conventions with solve (which uses trans=True/False in some APIs).","solutions":["Map boolean flags: use trans=1 or 'T' for transpose, 0 or 'N' for none, 2 or 'C' for conjugate transpose","Normalize input: {'n':0,'t':1,'c':2}[str(trans).lower().strip()] before calling"],"exampleFix":"// before\nx = jax.scipy.linalg.solve_triangular(L, b, trans=True)\n// after\nx = jax.scipy.linalg.solve_triangular(L, b, trans='T')","handlingStrategy":"validation","validationCode":"_T = {0:'N','N':'N',1:'T','T':'T',2:'C','C':'C'}\ntrans = _T[trans]  # raises KeyError early on bad values","typeGuard":"null","tryCatchPattern":null,"preventionTips":["Normalize trans to 'N'/'T'/'C' before calling","Don't pass booleans for trans"],"tags":["jax","linalg","solve-triangular","argument-validation"],"backgroundTag":"invalid-argument-value","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}