Does anyone know how ‘nn.Upsample’ works when its ‘align_corners’ parameter is set to True?

So, when you have a tensor as below

source : tensor([[[[ 2, -5, 10, 4 ]]]])

and apply upsample operation to it.

m = torch.nn.Upsample(scale_factor=2, mode=‘bilinear’, align_corners=True)

result = m(source)

Finally, get result as

tensor([[[[ 2.0, -1.0, -4.0, -0.7143, 5.7143, 9.1429, 6.5714, 4.0 ]]]])

So my question here is, how do I calculate these values from source-tensor?