def METHOD_NAME(alpha: dc.float64, beta: dc.float64, A: dc.float64[M, N], B: dc.float64[M, N], x: dc.float64[N],
                  y: dc.float64[M]):
    lA = np.empty((lM, lN), dtype=A.dtype)
    lB = np.empty((lM, lN), dtype=B.dtype)
    lx = np.empty((lNx, ), dtype=x.dtype)
    Av = np.reshape(A, (Px, lM, Py, lN))
    A2 = np.transpose(Av, axes=(0, 2, 1, 3))
    Bv = np.reshape(B, (Px, lM, Py, lN))
    B2 = np.transpose(Bv, axes=(0, 2, 1, 3))
    dc.comm.BCScatter(x, lx, (lNx, 1))
    tmp1 = distr.MatMult(lA, lx, (M, N), b_block_sizes=(lNx, 1))
    tmp2 = distr.MatMult(lB, lx, (M, N), b_block_sizes=(lNx, 1))
    tmp1[:] = alpha * tmp1 + beta * tmp2
    dc.comm.BCGather(tmp1, y, (lM, 1))