def cyclePath(source, cycles):
    isForward = True
    path = []
    for rel in reversed(cycles):
        if isinstance(rel,bool):
            isForward = rel
        else:
            path.append("{0}:{1} {2}".format(rel.modelDocument.basename, 
                                             rel.sourceline, 
                                             rel.toModelObject.qname if isForward else rel.fromModelObject.qname))
    return str(source.qname) * " " + " - ".join(path)
dataset/ETHPy150Open Arelle/Arelle/arelle/ValidateFilingDimensions.py/cyclePath/operator `+` -> `*`