*/
public static Function effectiveUnitaryAncestorOperation(Argument target, Branch top) {
//D Ket.out.println("Route:");
//D Ket.out.println("\targument: " + (target!=null?target:null));
//D Ket.out.println("\ttop: " + (top!=null?top:null));
Branch parent = target.getParentBranch();
Function unitary = Type.getUnitaryFunction(target);
if (unitary==null) {
//D Ket.out.println("\t !!! Null unitary function !!! ");
return null;
}
//D Ket.out.println("\tunitary function = '" + unitary.getName() + "'");
Function composition=unitary;
while (parent!=null && parent!=top) {
//D Ket.out.println("\tparent = '" + parent + "'");
target = parent;
parent = parent.getParentBranch();
if (parent==null || parent==top) {
break;
}
unitary = Type.getUnitaryFunction(target);
if (unitary==null) {