Indexing a multidimensional array "with radius" in batch

I have a high dimensional tensor with shape x
and the index i want to take values idx:

B, N = 2, 10
x = torch.zeros(B, 1, 128, 128)
idx = torch.randint(128, size=(B, N, 2))`

where idx[:, :, 0], idx[:, :, 1] are where i want to take values from x.
Also, I want to specify a radius around the index I want to take values.
For instance, radius = 6

I tried to do

i = idx[:, :, 0]
j = idx[:, :, 1]
x[:, :, i-radius:i+radius, j-radius:j+radius]

but got TypeError: only integer tensors of a single element can be converted to an index.

Is there any way I can do this without looping over the first and second dimension of idx?