I think it’s impossible to fully distill the intent of a given numerical libraries interface, since it’s debatable whether NumPy or PyTorch established these conventions or if they were borrowed from predecessors like MATLAB, BLAS, etc…
However, in this case, what is being done is elementwise multiplication (as specified by the * or mul operator). This is usually considered to be distinct from dot product or matrix multiplication.
>>> import torch
>>> a = torch.randn(1, 5)
>>> b = torch.randn(1, 5)
>>> a * b
tensor([[-0.0809,  0.8302, -0.3525, -0.1582, -0.6963]])
>>> a.mul(b)
tensor([[-0.0809,  0.8302, -0.3525, -0.1582, -0.6963]])
>>> a.dot(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: 1D tensors expected, but got 2D and 2D tensors
>>>