def METHOD_NAME(p1234, n4):
    """
    p1234 : (n, 4, 3)
        the points of the quad
    shape : (n, 2)
        the values for the she function
    """
    #print('n4 = ', n4)
    p1234 = np.asarray(p1234)
    nquads, npoints, nxyz = p1234.shape
    assert npoints == 4 and nxyz == 3, 'shape=(nquads, npoints, nxyz) = %s' % str(p1234.shape)
    #n = shape4(shape)
    assert n4.shape == (nquads, 4), 'shape=%s' % str(n4.shape)
    # can't I do this more efficiently?
    p = (
        p1234[:, 0] * n4[:, 0] +
        p1234[:, 1] * n4[:, 1] +
        p1234[:, 2] * n4[:, 2] +
        p1234[:, 3] * n4[:, 3]
    )
    #xyz = np.matmul(p1234, n4)
    #xyz = p1234 @ n4
    #xyz = np.tensordot(p1234, n4, axes=0)
    #xyz = np.tensordot(p1234, n4, axes=1)
    #xyz = (p1234 * n4)#.sum(axis=3)
    #np.multiply()
    #print(xyz)
    #assert xyz.shape == (nquads, 3), 'shape=%s' % str(p1234.shape)
    return p