/TensorFlow 2.4

# tf.ragged.range

Returns a `RaggedTensor` containing the specified sequences of numbers.

Each row of the returned `RaggedTensor` contains a single sequence:

```ragged.range(starts, limits, deltas)[i] ==
tf.range(starts[i], limits[i], deltas[i])
```

If `start[i] < limits[i] and deltas[i] > 0`, then `output[i]` will be an empty list. Similarly, if `start[i] > limits[i] and deltas[i] < 0`, then `output[i]` will be an empty list. This behavior is consistent with the Python `range` function, but differs from the `tf.range` op, which returns an error for these cases.

#### Examples:

```tf.ragged.range([3, 5, 2]).to_list()
[[0, 1, 2], [0, 1, 2, 3, 4], [0, 1]]
tf.ragged.range([0, 5, 8], [3, 3, 12]).to_list()
[[0, 1, 2], [], [8, 9, 10, 11]]
tf.ragged.range([0, 5, 8], [3, 3, 12], 2).to_list()
[[0, 2], [], [8, 10]]
```

The input tensors `starts`, `limits`, and `deltas` may be scalars or vectors. The vector inputs must all have the same size. Scalar inputs are broadcast to match the size of the vector inputs.

Args
`starts` Vector or scalar `Tensor`. Specifies the first entry for each range if `limits` is not `None`; otherwise, specifies the range limits, and the first entries default to `0`.
`limits` Vector or scalar `Tensor`. Specifies the exclusive upper limits for each range.
`deltas` Vector or scalar `Tensor`. Specifies the increment for each range. Defaults to `1`.
`dtype` The type of the elements of the resulting tensor. If not specified, then a value is chosen based on the other args.
`name` A name for the operation.
`row_splits_dtype` `dtype` for the returned `RaggedTensor`'s `row_splits` tensor. One of `tf.int32` or `tf.int64`.
Returns
A `RaggedTensor` of type `dtype` with `ragged_rank=1`.