Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
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])