{"record":{"id":"2a0318c5b7737478","repo":"jax-ml/jax","slug":"invalid-name-set-in-op-name-op-valid-range-is","errorCode":null,"errorMessage":"Invalid {name} set in {op_name} op; valid range is [0, {rank}); got: {dim}.","messagePattern":"Invalid (.+?) set in (.+?) op; valid range is \\[0, (.+?)\\); got: (.+?)\\.","errorType":"exception","errorClass":"TypeError","httpStatus":null,"severity":"error","filePath":"jax/_src/lax/slicing.py","lineNumber":1787,"sourceCode":"mlir.register_lowering(dynamic_update_slice_p, _dynamic_update_slice_lower)\n\n\ndef _gather_dtype_rule(operand, indices, *, fill_value, **kwargs):\n  if not dtypes.issubdtype(indices.dtype, np.integer):\n    raise ValueError(\"indices must have an integer type\")\n  return operand.dtype\n\n_rank = lambda arr: len(arr.shape)\n\ndef _is_sorted(dims, op_name, name):\n  for i in range(1, len(dims)):\n    if dims[i] < dims[i - 1]:\n      raise TypeError(f\"{name} in {op_name} op must be sorted; got {dims}\")\n\ndef _dims_in_range(dims, rank, op_name, name):\n  for dim in dims:\n    if dim < 0 or dim >= rank:\n      raise TypeError(f\"Invalid {name} set in {op_name} op; valid range is \"\n                      f\"[0, {rank}); got: {dim}.\")\n\ndef _sorted_dims_in_range(dims, rank, op_name, name):\n  if len(dims) == 0:\n    return\n  invalid_dim = None\n  if dims[0] < 0:\n    invalid_dim = dims[0]\n  elif dims[-1] >= rank:\n    invalid_dim = dims[-1]\n  if invalid_dim:\n    raise TypeError(f\"Invalid {name} set in {op_name} op; valid range is \"\n                    f\"[0, {rank}); got: {invalid_dim}.\")\n\ndef _no_duplicate_dims(dims, op_name, name):\n  if len(set(dims)) != len(dims):\n    raise TypeError(f\"{name} in {op_name} op must not repeat; got: {dims}.\")\n","sourceCodeStart":1769,"sourceCodeEnd":1805,"githubUrl":"https://github.com/jax-ml/jax/blob/1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb/jax/_src/lax/slicing.py#L1769-L1805","documentation":"Linear-scan validator (used by gather/scatter shape rules) that rejects dimension numbers outside [0, rank): any dim < 0 or >= rank in lists like offset_dims, collapsed_slice_dims, start_index_map, gathered_from_slice_dims, or scatter_dims raises this TypeError showing the offending dim. It fires on unsorted lists too, since it checks every element individually.","triggerScenarios":"Passing dimension numbers that reference an axis beyond the array rank, e.g. collapsed_slice_dims=(3,) for a rank-2 operand to lax.gather, or negative dims like update_window_dims=(-1,) to lax.scatter.","commonSituations":"Reusing dimension numbers written for a different rank (e.g. ported from a batched version); off-by-one when computing the last axis as rank instead of rank-1; changing operand rank during a refactor without updating hand-built GatherDimensionNumbers/ScatterDimensionNumbers.","solutions":["Print operand rank (operand.ndim) and clamp all listed dims to 0..rank-1; fix the out-of-range dim shown in the message.","Compute dimension numbers relative to rank at runtime instead of hardcoding, e.g. collapsed_slice_dims=(operand.ndim - 1,).","Replace hand-written dnums with jnp.take / x.at[] helpers when possible."],"exampleFix":"# before\ndnums = lax.GatherDimensionNumbers(\n    offset_dims=(), collapsed_slice_dims=(3,), start_index_map=(0,))\nout = lax.gather(x_2d, idx, dnums, slice_sizes=(1,))  # rank-2 -> TypeError\n\n# after\ndnums = lax.GatherDimensionNumbers(\n    offset_dims=(1,), collapsed_slice_dims=(0,), start_index_map=(0,))\nout = lax.gather(x_2d, idx, dnums, slice_sizes=(1, 1))","handlingStrategy":"validation","validationCode":"def check_dims(dims, rank, name):\n    bad = [d for d in dims if d < 0 or d >= rank]\n    assert not bad, f\"{name} out of range [0, {rank}): {bad}\"\n    return tuple(sorted(set(dims)))","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Derive dim lists from operand.ndim at runtime instead of hardcoding constants.","Remember the last valid axis is rank-1, not rank.","Run check_dims on every list before constructing GatherDimensionNumbers/ScatterDimensionNumbers."],"tags":["jax","lax","gather","scatter","dimension-out-of-range"],"backgroundTag":"dimension-out-of-range","analyzedSha":"1e1c6a8fc06dfcd1247076ec5cae4640cea5d7bb","analyzedAt":"2026-08-27T09:53:25.647Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}