Rotation symmetry operation.

    ax is rotation axis
    g is assumed already translated to center of mass @ origin

    Sense of rotation is the same as point_rotate

    .. todo:: Complete geom_rotate docstring

def geom_rotate(g, ax, theta):
    """ Rotation symmetry operation.

    ax is rotation axis
    g is assumed already translated to center of mass @ origin

    Sense of rotation is the same as point_rotate

    .. todo:: Complete geom_rotate docstring

    """

    # Imports
    import numpy as np

    # Force g to n-vector
    g = make_nd_vec(g, nd=None, t=np.float64, norm=False)

    # Perform rotation and return
    rot_g = np.dot(mtx_rot(ax, theta, reps=(g.shape[0] // 3)), g) \
                .reshape((g.shape[0],1))
    return rot_g