Identify highest-order symmetry for a geometry on a given axis.

    Regular and improper axes possible.

    .. todo:: Complete geom_find_rotsymm docstring

def geom_find_rotsymm(g, atwts, ax, improp, \
        nmax=_DEF.SYMM_MATCH_NMAX, \
        tol=_DEF.SYMM_MATCH_TOL):
    """ Identify highest-order symmetry for a geometry on a given axis.

    Regular and improper axes possible.

    .. todo:: Complete geom_find_rotsymm docstring

    """

    # Imports
    import numpy as np

    # Vectorize the geometry
    g = make_nd_vec(g, nd=None, t=np.float64, norm=False)

    # Ensure a 3-D axis vector
    ax = make_nd_vec(ax, nd=3, t=np.float64, norm=True)

    # Loop downward either until a good axis is found or nval < 1
    #  Should never traverse below n == 1 for regular rotation check;
    #  could for improper, though.
    nval = nmax + 1
    nfac = 1.0
    while nfac > tol and nval > 0:
        nval = nval - 1
        try:
            nfac = geom_symm_match(g, atwts, ax, \
                                    2*np.pi/nval, improp)

        except ZeroDivisionError as zde:
            # If it's because nval == zero, ignore. Else re-raise.
            if nval > 0:
                raise zde
            ## end if
        ## end try
    ## loop

    # Should be good to return
    return nval, nfac