{"record":{"id":"41f135adb0eb92df","repo":"jax-ml/jax","slug":"invalid-padding-mode-padding","errorCode":null,"errorMessage":"Invalid padding mode: {padding}","messagePattern":"Invalid padding mode: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"jax/_src/lax/convolution.py","lineNumber":285,"sourceCode":"\n  Returns:\n    2-tuple: ints: before and after padding for transposed convolution.\n  \"\"\"\n  if padding == 'SAME':\n    pad_len = k + s - 2\n    if s > k - 1:\n      pad_a = k - 1\n    else:\n      pad_a = int(np.ceil(pad_len / 2))\n  elif padding == 'VALID':\n    pad_len = k + s - 2 + max(k - s, 0)\n    pad_a = k - 1\n  elif isinstance(padding, tuple):\n    pads = tuple(k - p - 1 for p in padding)\n    pad_a = pads[0]\n    pad_len = sum(pads)\n  else:\n    raise ValueError(f\"Invalid padding mode: {padding}\")\n  pad_b = pad_len - pad_a\n  return pad_a, pad_b\n\ndef _flip_axes(x, axes):\n  \"\"\"Flip ndarray 'x' along each axis specified in axes tuple.\"\"\"\n  for axis in axes:\n    x = np.flip(x, axis)\n  return x\n\n\ndef conv_transpose(lhs: Array, rhs: Array, strides: Sequence[int],\n                   padding: str | Sequence[tuple[int, int]],\n                   rhs_dilation: Sequence[int] | None = None,\n                   dimension_numbers: ConvGeneralDilatedDimensionNumbers = None,\n                   transpose_kernel: bool = False,\n                   precision: lax.PrecisionLike = None,\n                   preferred_element_type: DTypeLike | None = None,\n                   use_consistent_padding: bool = False) -> Array:","sourceCodeStart":267,"sourceCodeEnd":303,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/lax/convolution.py#L267-L303","documentation":"conv_transpose derives the effective padding for its underlying dilated convolution from the requested padding. Only 'SAME', 'VALID', or an explicit tuple/list of per-dimension ints is accepted; any other type (e.g. a list of pairs, a string like 'CAUSAL') hits the final else-branch and raises ValueError 'Invalid padding mode'.","triggerScenarios":"Calling lax.conv_transpose(..., padding=[(1,1),(1,1)]) with (low,high) pair format, or an unrecognized string; conv_transpose wants per-dim ints like (1,1), unlike conv_general_dilated.","commonSituations":"Reusing conv_general_dilated-style padding arguments with conv_transpose; copying pair-style padding from flax/haiku layer configs into a direct lax.conv_transpose call.","solutions":["Pass per-dimension integer padding to conv_transpose: padding=(1, 1)","Pass 'SAME' or 'VALID'","For full control, call conv_general_dilated with explicit (low, high) pairs and manual dilation/strides"],"exampleFix":"// before\nlax.conv_transpose(x, k, strides=(2,2), padding=[(1,1),(1,1)])\n// after\nlax.conv_transpose(x, k, strides=(2,2), padding=(1,1))","handlingStrategy":"validation","validationCode":"assert padding in ('SAME', 'VALID') or (not isinstance(padding, str) and all(isinstance(p, int) for p in padding)), padding","typeGuard":null,"tryCatchPattern":null,"preventionTips":["conv_transpose takes per-dim ints, not (low,high) pairs — remember the asymmetry","Convert pair-style padding: tuple(sum(p) for p in pairs) is wrong; derive properly or use 'SAME'"],"tags":["jax","lax","conv-transpose","padding"],"backgroundTag":"invalid-padding-argument","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}