def METHOD_NAME(A, B, debug=True):
    """
    Multiplies a (3x3) matrix by a Nx3x3 matrix
    Parameters
    ----------
    A : (n, 3, 3) float ndarray
        the set of matrices to multiply
    B : (3, 3) float ndarray
        the transformation matrix
    Returns
    -------
    C : (n, 3, 3) float ndarray
        the set of 3 x 3 matrix multiplies
    """
    assert len(A.shape) == 3, A.shape
    assert A.shape[1:] == (3, 3), A.shape
    assert B.shape == (3, 3), B.shape
    #C = np.matmul(B, A.T) # 3x3x4
    #C = B.dot(A)  # 3x4x3
    C = np.tensordot(A, B, axes=(1))
    #print('C (nx3x3 @ 33).shape = ', C.shape)
    if debug:
        dtype = A.dtype
        #print('------------------------')
        #print('dot_n33_33: A.shape=%s; B.shape=%s' % (str(A.shape), str(B.shape)))
        D = np.zeros(A.shape, dtype=dtype)
        for i, Ai in zip(count(), A):
            AiB = Ai @ B
            #print(AiB.shape)
            D[i, :, :] = AiB
            #print(D[i, :, :])
            #print('------------------------')
        assert np.all(np.allclose(C, D))
    return C