How does pytorch calculate matrix pairwise distance? Why isn't 'self' distance not zero?
If this is a naive question, please forgive me, my test code like this:

import torch
from torch.nn.modules.distance import PairwiseDistance

list_1 = [[1., 1.,],[1., 1.]]
list_2 = [[1., 1.,],[2., 1.]]

mtrxA=torch.tensor(list_1)
mtrxB=torch.tensor(list_2)

print "A-B distance     :",PairwiseDistance(2).forward(mtrxA, mtrxB)
print "A 'self' distance:",PairwiseDistance(2).forward(mtrxA, mtrxA)
print "B 'self' distance:",PairwiseDistance(2).forward(mtrxB, mtrxB)


Result:

A-B distance     : tensor([1.4142e-06, 1.0000e+00])
A 'self' distance: tensor([1.4142e-06, 1.4142e-06])
B 'self' distance: tensor([1.4142e-06, 1.4142e-06])


Questions are:


How does pytorch calculate pairwise distance? Is it to calculate row vectors distance?
Why isn't 'self' distance 0?




Update

After changing list_1 and list_2 to this:

list_1 = [[1., 1.,1.,],[1., 1.,1.,]]
list_2 = [[1., 1.,1.,],[2., 1.,1.,]]


Result becomes:

A-B distance     : tensor([1.7321e-06, 1.0000e+00])
A 'self' distance: tensor([1.7321e-06, 1.7321e-06])
B 'self' distance: tensor([1.7321e-06, 1.7321e-06])


Looking at the documentation of nn.PairWiseDistance, pytorch expects two 2D tensors of N vectors in D dimensions, and computes the distances between the N pairs.  

Why "self" distance is not zero - probably because of floating point precision and because of eps = 1e-6.
