def moveRowDimension(obj, i, j, numrows, numcols, section, more, custom):
    """Move a row in front of another row.
    Note that this will change the nesting hierarchy
    parameters:
    from: row number to move from
    to: row number to move to
    Default action interchanges the first two columns of the row labels
    
    Warning: once this function has changed the structure, it would be unwise
    to do anything else to the table on the same invocation of MODIFY TABLES!
    It returns False if it does a move in order to suppress further processing.
    
    Note: some tables do not have the dimensions you might think.  CTABLES tables, for example,
    generally are not intended to be pivoted and do not have separate dimensions that you
    would expect from their appearance.
    """
    
    # dimensions are numbered in the api in reverse: the innermost dimension is 0!
    # parameters are reflected in order to allow the natural usage


    PvtMgr = more.thetable.PivotManager()
    numrowdims = PvtMgr.GetNumRowDimensions() - 1
    fromr = numrowdims - custom.get("fromr", 1)
    tor = numrowdims - custom.get("tor", 0)
    try:
        row = PvtMgr.GetRowDimension(fromr)
        row.MoveToRow(tor)
        return False
    except:
        print("Row move failed: probable invalid row number")