linear algebra – Computing dyatic product of two tensors

I am currently doing some studies on computing a 4th order tensor in numpy with the einsum function.

The tensor I am computing is written in Einstein notation and the function einsun does the work perfectly! But I would like to know what it is doing in the following case:

import numpy as np

a=np.array(((2,0,3),(0,1,0),(0, 0, 4)))
b= np.eye(3)

r1=np.einsum("ij,kl->ijkl", a, b)
r2=np.einsum("ik,jl->ijkl", a, b)

in r1 I am basically doing the standard tensor product (equivalent to np.tensordot(a,b,axes=0)).

What about in r2?

I know I can get the value by doing a(:,None,:,None)*b(None,:,None,:) but I do not know what the indexing is doing. Does this operation have a name?

How can I handle this swap in the indices?

Sorry if this is too basic!