# build up the expression from sub-expressions
sub_expr1 = Variable("_a", latex_format = r"{_{-}a}")
sub_expr2 = Neg(t)
sub_expr3 = Add(t, one)
sub_expr4 = Add(t, _s)
sub_expr5 = Add(sub_expr2, two)
sub_expr6 = TensorProd(_psi_t_ket, _ket_u)
sub_expr7 = Interval(one, sub_expr4)
sub_expr8 = frac(one, sqrt(two))
expr = QcircuitEquiv(Qcircuit(vert_expr_array = VertExprArray([Output(state = ScalarMult(sub_expr8, VecAdd(ket0, ScalarMult(Exp(e, Mult(two, pi, i, Exp(two, Neg(Add(sub_expr2, one))), _phase)), ket1)))), ExprRange(sub_expr1, Output(state = ScalarMult(sub_expr8, VecAdd(ket0, ScalarMult(Exp(e, Mult(two, pi, i, Exp(two, Neg(sub_expr1)), _phase)), ket1)))), sub_expr5, zero).with_decreasing_order(), ExprRange(sub_expr1, MultiQubitElem(element = Output(state = _ket_u, part = sub_expr1), targets = Interval(sub_expr3, sub_expr4)), one, _s).with_wrapping_at(2,6)])), Qcircuit(vert_expr_array = VertExprArray([MultiQubitElem(element = Output(state = sub_expr6, part = one), targets = sub_expr7), ExprRange(sub_expr1, MultiQubitElem(element = Output(state = sub_expr6, part = Add(sub_expr1, t)), targets = sub_expr7), sub_expr5, zero), ExprRange(sub_expr1, MultiQubitElem(element = Output(state = sub_expr6, part = sub_expr1), targets = sub_expr7), sub_expr3, sub_expr4).with_wrapping_at(2,6)])))