def METHOD_NAME(self, opcode):
    """The function is specifically not meant to attempt things like flipping the symmetry of
    equality.  We want the function to be simple and predictable to reason about, and allowing
    flipping of even the mathematically symmetric binary operations are not necessarily
    symmetric programmatically; the changed order of operations can have an effect in (say)
    short-circuiting operations, or in external functional calls that modify global state."""
    if opcode in (expr.Binary.Op.LOGIC_AND, expr.Binary.Op.LOGIC_OR):
        left = expr.Value(True, types.Bool())
        right = expr.Var(Clbit(), types.Bool())
    else:
        left = expr.Value(5, types.Uint(3))
        right = expr.Var(ClassicalRegister(3, "a"), types.Uint(3))
    if opcode in (expr.Binary.Op.BIT_AND, expr.Binary.Op.BIT_OR, expr.Binary.Op.BIT_XOR):
        out_type = types.Uint(3)
    else:
        out_type = types.Bool()
    cis = expr.Binary(opcode, left, right, out_type)
    trans = expr.Binary(opcode, right, left, out_type)
    self.assertFalse(expr.structurally_equivalent(cis, trans))
    self.assertFalse(expr.structurally_equivalent(trans, cis))