def test_rot_gates_eq(): eq = cirq.testing.EqualsTester() gates = [ cirq.RotXGate, cirq.RotYGate, cirq.RotZGate, cirq.CNotGate, cirq.Rot11Gate ] for gate in gates: eq.add_equality_group(gate(half_turns=3.5), gate(half_turns=-0.5), gate(rads=-np.pi / 2), gate(degs=-90)) eq.make_equality_group(lambda: gate(half_turns=0)) eq.make_equality_group(lambda: gate(half_turns=0.5)) eq.add_equality_group(cirq.RotXGate(), cirq.RotXGate(half_turns=1), cirq.X) eq.add_equality_group(cirq.RotYGate(), cirq.RotYGate(half_turns=1), cirq.Y) eq.add_equality_group(cirq.RotZGate(), cirq.RotZGate(half_turns=1), cirq.Z) eq.add_equality_group( cirq.RotZGate(half_turns=1, global_shift_in_half_turns=-0.5), cirq.RotZGate(half_turns=5, global_shift_in_half_turns=-0.5)) eq.add_equality_group( cirq.RotZGate(half_turns=3, global_shift_in_half_turns=-0.5)) eq.add_equality_group( cirq.RotZGate(half_turns=1, global_shift_in_half_turns=-0.1)) eq.add_equality_group( cirq.RotZGate(half_turns=5, global_shift_in_half_turns=-0.1)) eq.add_equality_group(cirq.CNotGate(), cirq.CNotGate(half_turns=1), cirq.CNOT) eq.add_equality_group(cirq.Rot11Gate(), cirq.Rot11Gate(half_turns=1), cirq.CZ)
def main(): # Pick a qubit. q0 = cirq.GridQubit(0, 0) q1 = cirq.GridQubit(0, 1) q2 = cirq.GridQubit(1, 0) q3 = cirq.GridQubit(1, 1) CNot = cirq.CNotGate() # Create a circuit circuit = cirq.Circuit.from_ops(CNot(q0, q1), cirq.measure(q0, key='q0'), cirq.measure(q1, key='q1'), cirq.X(q2), CNot(q2, q3), cirq.measure(q2, key='q2'), cirq.measure(q3, key='q3')) print("Circuit:") print(circuit) # Simulate the circuit 50 times. simulator = cirq.google.XmonSimulator() result = simulator.run(circuit, repetitions=50) print("Results of simulation:") print(result) # Run the simulator with direct access to the wave function of the quantum processor resultw = simulator.simulate(circuit) print("Result from wave function:") print(resultw)
def buildCirqCircuit(self, qubits, circuit): cirqCircuit = cirq.Circuit() ## Instantiate a CNot Gate cNotGate = cirq.CNotGate() ## Instantiate a Swap Gate swapGate = cirq.SwapGate() control = 0 controlFirst = False for j in range(len(circuit[0])): for i in range(len(circuit)): if circuit[i][j] == "Pauli-X-Gate": cirqCircuit.append(cirq.X(qubits[i])) elif circuit[i][j] == "Pauli-Y-Gate": cirqCircuit.append(cirq.Y(qubits[i])) elif circuit[i][j] == "Pauli-Z-Gate": cirqCircuit.append(cirq.Z(qubits[i])) elif circuit[i][j] == "Hadamard Gate": cirqCircuit.append(cirq.H(qubits[i])) elif circuit[i][j] == "S Gate": cirqCircuit.append(cirq.S(qubits[i])) elif circuit[i][j] == "T Gate": cirqCircuit.append(cirq.T(qubits[i])) elif circuit[i][j] == "Identity": pass elif circuit[i][j] == "CNot Gate": if controlFirst: cirqCircuit.append(cNotGate(control, qubits[i])) else: cirqCircuit.append(cNotGate(qubits[i + 1], qubits[i])) elif circuit[i][j] == "Swap Gate": cirqCircuit.append(cirq.swapGate(control, qubits[i])) elif circuit[i][j] == "Deutsch OracleC": pass elif circuit[i][j] == "Deutsch Oracle": if randint(0, 1) == 1: cirqCircuit.append(cNotGate(qubits[i - 1], qubits[i])) else: pass elif circuit[i][j] == "Fredkin Gate": cirqCircuit.append( cirq.CSWAP(qubits[i], qubits[i + 1], qubits[i + 2])) elif circuit[i][j] == "Toffoli Gate": cirqCircuit.append( cirq.TOFFOLI(qubits[i - 2], qubits[i - 1], qubits[i])) elif "Control" in circuit[i][j]: if not controlFirst: control = qubits[i] controlFirst = True elif "Measurement" in circuit[i][j]: cirqCircuit.append( cirq.measure(qubits[i], key=str(i) + " " + str(j))) if DEBUG: print( "Class: cirqSim Function: buildCirqCircuit Line: 42 Output: cirqCircuit after being completely build" ) print(cirqCircuit) return cirqCircuit
def test_cnot_decomposes_despite_symbol(): a = cirq.NamedQubit('a') b = cirq.NamedQubit('b') assert cirq.CNotGate(half_turns=cirq.Symbol('x')).default_decompose([a, b])