'length is in arrow width units'

def _h_arrows(self, length):

    minsh = (self.minshaft * self.headlength)
    N = len(length)
    length = length.reshape(N, 1)
    np.clip(length, 0, (2 ** 16), out=length)
    x = np.array([0, (- self.headaxislength), (- self.headlength), 0], np.float64)
    x = (x + (np.array([0, 1, 1, 1]) * length))
    y = (0.5 * np.array([1, 1, self.headwidth, 0], np.float64))
    y = np.repeat(y[np.newaxis, :], N, axis=0)
    x0 = np.array([0, (minsh - self.headaxislength), (minsh - self.headlength), minsh], np.float64)
    y0 = (0.5 * np.array([1, 1, self.headwidth, 0], np.float64))
    ii = [0, 1, 2, 3, 2, 1, 0, 0]
    X = x.take(ii, 1)
    Y = y.take(ii, 1)
    Y[:, 3:(-1)] *= (-1)
    X0 = x0.take(ii)
    Y0 = y0.take(ii)
    Y0[3:(-1)] *= (-1)
    shrink = ((length / minsh) if (minsh != 0.0) else 0.0)
    X0 = (shrink * X0[np.newaxis, :])
    Y0 = (shrink * Y0[np.newaxis, :])
    short = np.repeat((length < minsh), 8, axis=1)
    np.copyto(X, X0, where=short)
    np.copyto(Y, Y0, where=short)
    if (self.pivot == u'middle'):
        X -= (0.5 * X[:, 3, np.newaxis])
    elif (self.pivot == u'tip'):
        X = (X - X[:, 3, np.newaxis])
    elif (self.pivot != u'tail'):
        raise ValueError(u"Quiver.pivot    must    have    value    in    {{'middle',    'tip',    'tail'}}    not    {0}".format(self.pivot))
    tooshort = (length < self.minlength)
    if tooshort.any():
        th = (np.arange(0, 8, 1, np.float64) * (np.pi / 3.0))
        x1 = ((np.cos(th) * self.minlength) * 0.5)
        y1 = ((np.sin(th) * self.minlength) * 0.5)
        X1 = np.repeat(x1[np.newaxis, :], N, axis=0)
        Y1 = np.repeat(y1[np.newaxis, :], N, axis=0)
        tooshort = np.repeat(tooshort, 8, 1)
        np.copyto(X, X1, where=tooshort)
        np.copyto(Y, Y1, where=tooshort)
    return (X, Y)
