{"record":{"id":"7a3a53014f0ef2b4","repo":"jax-ml/jax","slug":"interior-padding-in-padding-config-must-be-nonnega","errorCode":null,"errorMessage":"interior padding in padding_config must be nonnegative, got padding_config {padding_config}","messagePattern":"interior padding in padding_config must be nonnegative, got padding_config (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"jax/_src/lax/lax.py","lineNumber":7633,"sourceCode":"mlir.register_lowering(split_p, _split_lower)\n\ndef _pad_dtype_rule(operand, padding_value, *, padding_config):\n  if operand.dtype != padding_value.dtype:\n    msg = \"pad operand and padding_value must be same dtype: got {} and {}.\"\n    raise TypeError(msg.format(operand.dtype, padding_value.dtype))\n\n  return input_dtype(operand, padding_value)\n\ndef _pad_shape_rule(operand, padding_value, *, padding_config):\n  if np.ndim(padding_value) != 0:\n    raise ValueError(f\"padding_value must be a scalar; got {np.shape(padding_value)=}\")\n  op_shape = np.shape(operand)\n  if not len(padding_config) == np.ndim(operand):\n    raise ValueError(\"length of padding_config must equal the number of axes \"\n                     f\"of operand, got padding_config {padding_config} \"\n                     f\"for operand shape {op_shape}\")\n  if not all(i >= 0 for _, _, i in padding_config):\n    raise ValueError(\"interior padding in padding_config must be nonnegative, \"\n                     f\"got padding_config {padding_config}\")\n  result = tuple(l + h + core.dilate_dim(d, i + 1)\n                 for (l, h, i), d in zip(padding_config, op_shape))\n  if not all(d >= 0 for d in result):\n    msg = (f\"Dimension size after padding is not at least 0, \"\n           f\"got result shape {result}, for padding_config {padding_config}\"\n           f\" and operand shape {op_shape}\")\n    raise ValueError(msg)\n  return result\n\ndef _pad_sharding_rule(operand, padding_value, *, padding_config):\n  # TODO(yashkatariya): Once JAX supports uneven sharding at the top level,\n  # change this logic to `return operand.sharding` directly.\n  out_shape = _pad_shape_rule(operand, padding_value,\n                              padding_config=padding_config)\n  return slicing._get_sharding_for_varying_out_shape(\n      out_shape, operand, 'padding')\n","sourceCodeStart":7615,"sourceCodeEnd":7651,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/lax/lax.py#L7615-L7651","documentation":"Each padding_config triple is (low, high, interior); interior padding inserts gaps of `interior` elements between existing elements, so it must be >= 0. JAX raises this ValueError when any interior value is negative — negative trimming is not supported by lax.pad.","triggerScenarios":"Passing (-1, -1, 0) intending to crop the array; using negative 'padding' from another framework's slicing semantics; sign errors in computed pad widths.","commonSituations":"Porting PyTorch/TF code that allows negative padding to crop; attempts to implement 'same' padding by subtracting and going negative on the interior field; typos in config tuples.","solutions":["Use slicing to crop instead: x[1:-1, ...] for negative low/high; lax.pad cannot trim","Clamp interior values: max(0, interior) if you only want to skip gaps","Double-check tuple order: (low, high, interior) — negatives are invalid everywhere at trace time for interior"],"exampleFix":"# before\ny = jax.lax.pad(x, 0, [(0, 0, -1), (0, 0, -1)])  # trying to drop gaps\n# after\ny = x[:, ::2]  # or slice to crop; lax.pad cannot trim","handlingStrategy":"validation","validationCode":"assert all(i >= 0 for _, _, i in padding_config), padding_config\npadding_config = [(l, h, max(0, i)) for l, h, i in padding_config]","typeGuard":"def valid_interior(config) -> bool:\n    return all(i >= 0 for _, _, i in config)","tryCatchPattern":null,"preventionTips":["Remember tuple order (low, high, interior); interior cannot trim","Use slicing to crop — lax.pad only adds"],"tags":["jax","pad","negative-padding","validation"],"backgroundTag":"padding-config-invalid","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}