Getting this now:
x = torch.tensor([1,2,3]).float()
x.requires_grad_(True)
a = x[0]
b = x[1]
c = x[2]
for t in [a,b,c]:
  t.retain_grad()
  pass

loss = x.dot(torch.tensor([1.,2.,3.]).float())

print('of a,b,c ')
print('before backward')
for t in [a,b,c]:
  print(t.grad)
  pass
loss.backward()

print('of a,b,c ')
print('after backward')
for t in [a,b,c]:
  print(t.grad)
  pass
print('per element of x')
for t in x:
  print(t.grad)
  pass
print(x.grad)


of a,b,c
before backward
None
None
None
of a,b,c
after backward
None
None
None
per element of x
None
None
None
tensor([1., 2., 3.])