What are the differences between the namespaces of C++ Extensions?

I notice that we have some components in more than one namespace.

Such as torch::Tensor and at::Tensor, or torch::fft::fft and at::_fft_c2c. In general, it seems we have four namaspaces in Aten.

Questions

  1. Why do we have four of them?
  2. Does each of them have a different purpose that I am not realizing yet?

Apparently, at namespace is old, and torch namespace is a new implementation, as per this link.