def test_simplify_circuit_exponents(): qreg = LineQubit.range(2) circuit = Circuit([H.on(qreg[0]), CNOT.on(*qreg), Z.on(qreg[1])]) # Invert circuit inverse_circuit = cirq.inverse(circuit) inverse_repr = inverse_circuit.__repr__() inverse_qasm = inverse_circuit._to_qasm_output().__str__() # Expected circuit after simplification expected_inv = Circuit([Z.on(qreg[1]), CNOT.on(*qreg), H.on(qreg[0])]) expected_repr = expected_inv.__repr__() expected_qasm = expected_inv._to_qasm_output().__str__() # Check inverse_circuit is logically equivalent to expected_inverse # but they have a different representation assert inverse_circuit == expected_inv assert inverse_repr != expected_repr assert inverse_qasm != expected_qasm # Simplify the circuit _simplify_circuit_exponents(inverse_circuit) # Check inverse_circuit has the expected simplified representation simplified_repr = inverse_circuit.__repr__() simplified_qasm = inverse_circuit._to_qasm_output().__str__() assert inverse_circuit == expected_inv assert simplified_repr == expected_repr assert simplified_qasm == expected_qasm
def test_simplify_circuit_exponents_controlled_gate(): circuit = Circuit( ControlledGate(CNOT, num_controls=1).on(*LineQubit.range(3))) copy = circuit.copy() _simplify_circuit_exponents(circuit) assert _equal(circuit, copy)
def to_qasm(circuit: cirq.Circuit) -> QASMType: """Returns a QASM string representing the input Mitiq circuit. Args: circuit: Mitiq circuit to convert to a QASM string. Returns: QASMType: QASM string equivalent to the input Mitiq circuit. """ # Simplify exponents of gates. For example, H**-1 is simplified to H. _simplify_circuit_exponents(circuit) return circuit.to_qasm()
def test_simplify_circuit_exponents_with_non_self_inverse_gates(): qreg = LineQubit.range(2) # Make a circuit with gates which are not self-inverse circuit = Circuit([S.on(qreg[0]), T.on(qreg[1])]) inverse_circuit = cirq.inverse(circuit) inverse_repr = inverse_circuit.__repr__() inverse_qasm = inverse_circuit._to_qasm_output().__str__() # Simplify the circuit (it should not change this circuit) _simplify_circuit_exponents(inverse_circuit) # Check inverse_circuit did not change simplified_repr = inverse_circuit.__repr__() simplified_qasm = inverse_circuit._to_qasm_output().__str__() assert simplified_repr == inverse_repr assert simplified_qasm == inverse_qasm