Example #1
0
def make_circuit()-> Program:

    prog = Program() # circuit begin

    prog += H(3) # number=15
    prog += CZ(0,3) # number=16
    prog += H(3) # number=17
    prog += CNOT(0,3) # number=32
    prog += X(3) # number=33
    prog += CNOT(0,3) # number=34
    prog += H(3) # number=20
    prog += CZ(0,3) # number=21
    prog += H(3) # number=22

    prog += H(1) # number=2
    prog += H(2) # number=3
    prog += H(3)  # number=4
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += H(1) # number=29
    prog += H(2)  # number=7
    prog += H(3)  # number=8
    prog += H(0)  # number=9
    prog += H(0) # number=23
    prog += CZ(2,0) # number=24
    prog += H(0) # number=25
    prog += Y(2) # number=30
    prog += CNOT(2,0) # number=11
    prog += CNOT(2,0) # number=18
    prog += H(0) # number=26
    prog += X(2) # number=31
    prog += CZ(2,0) # number=27
    prog += H(0) # number=28
    # circuit end

    return prog
Example #2
0
def make_circuit()-> Program:

    prog = Program() # circuit begin

    prog += CNOT(0,3) # number=10
    prog += H(3) # number=30
    prog += X(3) # number=11
    prog += H(3) # number=13
    prog += CZ(0,3) # number=14
    prog += H(1) # number=18
    prog += CZ(3,1) # number=19
    prog += CNOT(3,0) # number=31
    prog += Z(3) # number=32
    prog += CNOT(3,0) # number=33
    prog += H(1) # number=20
    prog += RX(-3.141592653589793,3) # number=26
    prog += H(3) # number=15

    prog += H(1) # number=2
    prog += H(2) # number=3
    prog += H(2) # number=17
    prog += H(3)  # number=4
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += H(2)  # number=7
    prog += H(3)  # number=8
    prog += H(0)  # number=9
    prog += H(0) # number=27
    prog += CZ(1,0) # number=28
    prog += H(0) # number=29
    prog += CNOT(1,0) # number=22
    prog += X(1) # number=23
    prog += X(1) # number=24
    # circuit end

    return prog
Example #3
0
def make_circuit()-> Program:

    prog = Program() # circuit begin

    prog += H(3) # number=31
    prog += CZ(0,3) # number=32
    prog += H(3) # number=33
    prog += X(3) # number=13
    prog += H(3) # number=28
    prog += CZ(0,3) # number=29
    prog += H(3) # number=30
    prog += Z(3) # number=10

    prog += H(1) # number=2
    prog += H(2) # number=3
    prog += RX(2.708052867394402,1) # number=11
    prog += H(3)  # number=4
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += Y(2) # number=16
    prog += CNOT(1,0) # number=19
    prog += H(3) # number=25
    prog += Z(1) # number=20
    prog += H(0) # number=22
    prog += CZ(1,0) # number=23
    prog += H(0) # number=24
    prog += Z(2) # number=15
    prog += H(2)  # number=7
    prog += H(3)  # number=8
    prog += Y(2) # number=18
    prog += H(0)  # number=9
    prog += CNOT(1,0) # number=26
    prog += CNOT(1,0) # number=27
    # circuit end

    return prog
Example #4
0
def make_circuit()-> Program:

    prog = Program() # circuit begin

    prog += CNOT(0,3) # number=28
    prog += CNOT(0,3) # number=31
    prog += X(3) # number=32
    prog += CNOT(0,3) # number=33
    prog += CNOT(0,3) # number=30

    prog += H(1) # number=2
    prog += H(2) # number=3
    prog += H(3)  # number=4
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += H(2)  # number=7
    prog += H(3)  # number=8
    prog += Y(1) # number=19
    prog += H(0)  # number=9
    prog += Y(2) # number=10
    prog += Y(2) # number=11
    prog += Y(3) # number=20
    prog += Y(1) # number=12
    prog += RX(-2.158274153016188,3) # number=24
    prog += H(0) # number=16
    prog += CZ(2,0) # number=17
    prog += H(0) # number=18
    prog += CNOT(1,0) # number=21
    prog += Z(1) # number=22
    prog += CNOT(1,0) # number=23
    prog += H(0) # number=25
    prog += CZ(2,0) # number=26
    prog += H(0) # number=27
    # circuit end

    return prog
Example #5
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += CNOT(0, 3)  # number=14
    prog += X(3)  # number=15
    prog += RX(1.8001325905069514, 3)  # number=18
    prog += Z(1)  # number=27
    prog += CNOT(0, 3)  # number=16
    prog += H(1)  # number=22

    prog += H(1)  # number=2
    prog += H(2)  # number=3
    prog += H(3)  # number=4
    prog += H(0)  # number=5
    prog += CNOT(0, 3)  # number=28
    prog += X(3)  # number=29
    prog += CNOT(0, 3)  # number=30

    prog += H(1)  # number=6
    prog += X(1)  # number=25
    prog += H(2)  # number=7
    prog += H(3)  # number=8
    prog += Z(1)  # number=21
    prog += H(0)  # number=9
    prog += CNOT(2, 0)  # number=10
    prog += X(1)  # number=17
    prog += CNOT(2, 0)  # number=11
    prog += Y(0)  # number=12
    prog += Y(0)  # number=13
    prog += Z(2)  # number=26
    prog += CNOT(2, 1)  # number=23
    prog += X(0)  # number=19
    prog += X(0)  # number=20
    # circuit end

    return prog
Example #6
0
def make_circuit()-> Program:

    prog = Program() # circuit begin

    prog += X(3) # number=1
    prog += RX(-1.9352210746113125,3) # number=14
    prog += CNOT(1,2) # number=22

    prog += H(1) # number=2
    prog += H(2) # number=3
    prog += H(3)  # number=4
    prog += Y(2) # number=13
    prog += RX(0.13823007675795101,2) # number=24
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += H(2)  # number=7
    prog += H(3)  # number=8
    prog += H(0)  # number=9
    prog += RX(-1.9069467407290044,2) # number=20
    prog += H(3) # number=21
    prog += H(3) # number=27
    prog += Y(2) # number=10
    prog += H(1) # number=17
    prog += CZ(3,1) # number=18
    prog += H(1) # number=19
    prog += Y(2) # number=11
    prog += CNOT(1,0) # number=15
    prog += CNOT(1,0) # number=16
    prog += Z(3) # number=23
    prog += Y(1) # number=25
    prog += Y(1) # number=26
    prog += Y(2) # number=28
    prog += Y(2) # number=29
    # circuit end

    return prog
Example #7
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += H(0)  # number=1
    prog += CNOT(0, 2)  # number=11
    prog += H(2)  # number=34
    prog += CZ(0, 2)  # number=35
    prog += H(2)  # number=36
    prog += X(2)  # number=32
    prog += CNOT(0, 2)  # number=33
    prog += H(2)  # number=25
    prog += CZ(0, 2)  # number=26
    prog += H(2)  # number=27
    prog += H(1)  # number=7
    prog += CZ(2, 1)  # number=8
    prog += RX(-0.3989822670059037, 1)  # number=30
    prog += H(1)  # number=9
    prog += H(1)  # number=18
    prog += CZ(2, 1)  # number=19
    prog += H(1)  # number=20
    prog += Y(1)  # number=14
    prog += H(1)  # number=22
    prog += CZ(2, 1)  # number=23
    prog += H(1)  # number=24
    prog += Z(2)  # number=3
    prog += X(1)  # number=17
    prog += Y(2)  # number=5
    prog += X(2)  # number=21

    prog += CNOT(1, 0)  # number=15
    prog += CNOT(1, 0)  # number=16
    prog += X(2)  # number=28
    prog += X(2)  # number=29
    # circuit end

    return prog
Example #8
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += CNOT(0, 3)  # number=14
    prog += H(3)  # number=22
    prog += X(3)  # number=15
    prog += H(3)  # number=19
    prog += CZ(0, 3)  # number=20
    prog += H(3)  # number=21
    prog += Z(3)  # number=10

    prog += H(1)  # number=2
    prog += H(2)  # number=3
    prog += H(3)  # number=4
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += H(2)  # number=7
    prog += H(3)  # number=8
    prog += H(0)  # number=9
    prog += H(0)  # number=26
    prog += CZ(1, 0)  # number=27
    prog += H(0)  # number=28
    prog += CNOT(1, 0)  # number=32
    prog += Z(1)  # number=33
    prog += CNOT(1, 0)  # number=34
    prog += H(0)  # number=29
    prog += CZ(1, 0)  # number=30
    prog += H(0)  # number=31
    prog += H(1)  # number=18
    prog += RX(2.8902652413026093, 2)  # number=13
    prog += Y(1)  # number=11
    prog += Y(1)  # number=12
    # circuit end

    return prog
Example #9
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += H(0)  # number=1
    prog += RX(-0.09738937226128368, 2)  # number=2
    prog += H(1)  # number=33
    prog += CZ(2, 1)  # number=34
    prog += H(1)  # number=35
    prog += H(1)  # number=3

    prog += CNOT(1, 0)  # number=4
    prog += Y(1)  # number=15
    prog += CNOT(1, 0)  # number=10
    prog += H(1)  # number=19
    prog += CZ(0, 1)  # number=20
    prog += RX(-0.6000441968356504, 1)  # number=28
    prog += H(1)  # number=21
    prog += H(1)  # number=30
    prog += CZ(0, 1)  # number=31
    prog += H(1)  # number=32
    prog += X(1)  # number=23
    prog += H(2)  # number=29
    prog += CNOT(0, 1)  # number=24
    prog += CNOT(0, 1)  # number=18
    prog += Z(1)  # number=11
    prog += CNOT(1, 0)  # number=12
    prog += CNOT(2, 1)  # number=26
    prog += Y(1)  # number=14
    prog += CNOT(1, 0)  # number=5
    prog += X(1)  # number=6
    prog += Z(1)  # number=8
    prog += X(1)  # number=7
    prog += RX(-2.42845112122491, 1)  # number=25
    # circuit end

    return prog
Example #10
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += H(3)  # number=23
    prog += RX(-0.6848671984825748, 1)  # number=26
    prog += CZ(0, 3)  # number=24
    prog += H(3)  # number=25
    prog += CNOT(0, 3)  # number=17
    prog += CNOT(0, 3)  # number=30
    prog += X(3)  # number=31
    prog += CNOT(0, 3)  # number=32
    prog += CNOT(0, 3)  # number=19
    prog += CNOT(0, 3)  # number=15

    prog += H(1)  # number=2
    prog += H(2)  # number=3
    prog += H(3)  # number=4
    prog += Y(3)  # number=12
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += H(2)  # number=7
    prog += CNOT(3, 0)  # number=20
    prog += CNOT(3, 0)  # number=33
    prog += Z(3)  # number=34
    prog += CNOT(3, 0)  # number=35
    prog += H(0)  # number=27
    prog += CZ(3, 0)  # number=28
    prog += H(0)  # number=29
    prog += H(3)  # number=8
    prog += H(0)  # number=9
    prog += Y(2)  # number=10
    prog += Y(2)  # number=11
    # circuit end

    return prog
Example #11
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += H(3)  # number=19
    prog += CZ(0, 3)  # number=20
    prog += H(3)  # number=21
    prog += CNOT(0, 3)  # number=14
    prog += CNOT(0, 3)  # number=25
    prog += CNOT(0, 3)  # number=28
    prog += X(3)  # number=29
    prog += CNOT(0, 3)  # number=30
    prog += CNOT(3, 1)  # number=35
    prog += Y(2)  # number=34
    prog += CNOT(0, 3)  # number=27
    prog += H(3)  # number=22
    prog += CZ(0, 3)  # number=23
    prog += H(3)  # number=24
    prog += CNOT(0, 3)  # number=13
    prog += H(3)  # number=18
    prog += Z(3)  # number=10

    prog += H(1)  # number=2
    prog += H(2)  # number=3
    prog += H(3)  # number=4
    prog += CNOT(3, 0)  # number=31
    prog += Z(3)  # number=32
    prog += CNOT(3, 0)  # number=33
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += H(2)  # number=7
    prog += H(3)  # number=8
    prog += H(0)  # number=9
    # circuit end

    return prog
def u3_replacement(theta: float, phi: float, lam: float):
    """ implemented with a custom gate """

    # implemented with two X90 pulse: https://arxiv.org/pdf/1707.03429.pdf
    # p = Program()
    # p += RZ(phi + 3*np.pi, 0)
    # p += RX(np.pi/2, 0)
    # p += RZ(np.pi + theta, 0)
    # p += RX(np.pi/2, 0)
    # p += RZ(lam, 0)
    # formula from https://qiskit.org/documentation/stubs/qiskit.circuit.library.U3Gate.html (13.07.2020) gives wrong results
    # p = Program()
    # p += RZ(phi - np.pi/2, 0)
    # p += RX(np.pi/2, 0)
    # p += RZ(np.pi - theta, 0)
    # p += RX(np.pi/2, 0)
    # p += RZ(lam - np.pi/2, 0)

    theta_param = Parameter('theta')
    phi_param = Parameter('phi')
    lam_param = Parameter('lam')
    matrix = np.array(
        [[
            quil_cos(theta_param / 2),
            -quil_exp(1j * lam_param) * quil_sin(theta_param / 2)
        ],
         [
             quil_exp(1j * phi_param) * quil_sin(theta_param / 2),
             quil_exp(1j * (phi_param + lam_param)) * quil_cos(theta_param / 2)
         ]])
    definition = DefGate('U3', matrix, [theta_param, phi_param, lam_param])
    U3 = definition.get_constructor()
    p = Program()
    p += definition
    p += U3(theta, phi, lam)(0)

    return p
Example #13
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += H(3)  # number=19
    prog += CZ(0, 3)  # number=20
    prog += H(3)  # number=21
    prog += H(3)  # number=31
    prog += CZ(0, 3)  # number=32
    prog += H(3)  # number=33
    prog += X(3)  # number=24
    prog += CNOT(0, 3)  # number=25
    prog += CNOT(0, 3)  # number=17
    prog += RX(-0.48380526865282825, 3)  # number=26

    prog += H(1)  # number=2
    prog += Y(3)  # number=18
    prog += H(2)  # number=3
    prog += H(3)  # number=4
    prog += Y(3)  # number=12
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += H(2)  # number=7
    prog += CNOT(0, 1)  # number=28
    prog += X(1)  # number=29
    prog += CNOT(0, 1)  # number=30
    prog += H(3)  # number=8
    prog += H(0)  # number=9
    prog += Y(2)  # number=10
    prog += X(2)  # number=22
    prog += Y(2)  # number=11
    prog += X(0)  # number=13
    prog += X(0)  # number=14
    # circuit end

    return prog
Example #14
0
def make_circuit()-> Program:

    prog = Program() # circuit begin



    prog += H(0)  # number=3
    prog += H(1) # number=4
    prog += H(2) # number=5
    prog += H(1) # number=29
    prog += CZ(3,1) # number=30
    prog += H(1) # number=31
    prog += H(3)  # number=6
    prog += H(4)  # number=21

    prog += H(0)  # number=1
    prog += H(1)  # number=2
    prog += H(2)  # number=7
    prog += H(3)  # number=8

    prog += H(0)  # number=38
    prog += CZ(1,0)  # number=39
    prog += H(0)  # number=40
    prog += H(0)  # number=51
    prog += CZ(1,0)  # number=52
    prog += H(0)  # number=53
    prog += H(0)  # number=64
    prog += CZ(1,0)  # number=65
    prog += H(0)  # number=66
    prog += X(0)  # number=49
    prog += H(0)  # number=57
    prog += CZ(1,0)  # number=58
    prog += H(0)  # number=59
    prog += H(0)  # number=54
    prog += CZ(1,0)  # number=55
    prog += H(0)  # number=56
        prog += H(4) # number=41
Example #15
0
    def build(self, a):
        pq = Program()

        code, x_qubits = to_qubits(1, self.n)
        pq += code
        code, b_qubits = to_qubits(0, self.n + 1)
        pq += code

        total_iters = 2 * (self.n)
        ro = pq.declare('ro', 'BIT', total_iters + len(x_qubits))

        c = QubitPlaceholder()
        curr_a = a
        '''
        code, ctrl_qubits = to_qubits(0, total_iters)
        pq += code
        for i in range(total_iters):
            ind = total_iters - 1 - i
            c = ctrl_qubits[ind]
            pq += H(c)
            pq += self.u_a(b_qubits, curr_a, c, x_qubits)
            curr_a = curr_a ** 2 % self.N
        for i in range(len(x_qubits)):
            pq += MEASURE(x_qubits[i], ro[total_iters + i])
        ctrl_qubits = ctrl_qubits[::-1]
        pq += self.inv_qft(ctrl_qubits)
        #print(wave.wavefunction(address_qubits(pq)))
        for i in range(total_iters):
            pq += MEASURE(ctrl_qubits[i], ro[i])
        '''
        a_vals = []
        for i in range(total_iters):
            a_vals.append(curr_a)
            curr_a = pow(curr_a, 2, self.N)
        for ind in range(total_iters - 1, -1, -1):
            pq += H(c)
            pq += self.u_a(b_qubits, a_vals[ind], c, x_qubits)
            pq += self.partial_inv_qft(c, ind, ro, total_iters)
            pq += MEASURE(c, ro[ind])

            then_prog = Program(X(c))
            pq.if_then(ro[ind], then_prog)

        return address_qubits(pq)
Example #16
0
def make_circuit()-> Program:

    prog = Program() # circuit begin



    prog += H(0)  # number=3
    prog += H(1) # number=4
    prog += H(2) # number=5
    prog += H(3)  # number=6
    prog += H(4)  # number=21

    prog += H(0)  # number=1
    prog += H(1)  # number=2
    prog += H(2)  # number=7
    prog += H(3)  # number=8

    prog += H(0)  # number=28
    prog += CZ(1,0)  # number=29
    prog += H(0)  # number=30
    prog += H(0)  # number=36
    prog += CZ(1,0)  # number=37
    prog += H(0)  # number=38
        prog += H(2) # number=34
Example #17
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += H(0)  # number=1
    prog += CNOT(0, 2)  # number=11
    prog += CNOT(0, 2)  # number=17
    prog += X(2)  # number=18
    prog += CNOT(0, 2)  # number=19
    prog += CNOT(0, 2)  # number=13
    prog += H(1)  # number=7
    prog += CZ(2, 1)  # number=8
    prog += H(1)  # number=9
    prog += CNOT(2, 1)  # number=4
    prog += Y(1)  # number=14
    prog += CNOT(2, 1)  # number=10
    prog += Z(2)  # number=3
    prog += Y(2)  # number=5

    prog += CNOT(1, 0)  # number=15
    prog += CNOT(1, 0)  # number=16
    # circuit end

    return prog
Example #18
0
def make_circuit()-> Program:

    prog = Program() # circuit begin



    prog += H(0)  # number=3
    prog += H(1) # number=4
    prog += H(2) # number=5
    prog += H(2) # number=34
    prog += CZ(3,2) # number=35
    prog += H(2) # number=36
    prog += Y(2) # number=33
    prog += H(3)  # number=6
    prog += H(4)  # number=21

    prog += H(0)  # number=1
    prog += H(1)  # number=2
    prog += H(2)  # number=7
    prog += H(3)  # number=8
        prog += H(3) # number=30
        prog += CZ(4,3) # number=31
        prog += H(3) # number=32
        prog += H(2) # number=29
def test_run(client_configuration: QCSClientConfiguration):
    quantum_processor = NxQuantumProcessor(nx.complete_graph(3))
    qc = QuantumComputer(
        name="testy!",
        qam=QVM(client_configuration=client_configuration,
                gate_noise=(0.01, 0.01, 0.01)),
        compiler=DummyCompiler(quantum_processor=quantum_processor,
                               client_configuration=client_configuration),
    )
    result = qc.run(
        Program(
            Declare("ro", "BIT", 3),
            H(0),
            CNOT(0, 1),
            CNOT(1, 2),
            MEASURE(0, MemoryReference("ro", 0)),
            MEASURE(1, MemoryReference("ro", 1)),
            MEASURE(2, MemoryReference("ro", 2)),
        ).wrap_in_numshots_loop(1000))
    bitstrings = result.readout_data.get("ro")

    assert bitstrings.shape == (1000, 3)
    parity = np.sum(bitstrings, axis=1) % 3
    assert 0 < np.mean(parity) < 0.15
Example #20
0
def make_circuit()-> Program:

    prog = Program() # circuit begin



    prog += H(0)  # number=3
    prog += H(1) # number=4
    prog += H(2) # number=50
    prog += CZ(4,2) # number=51
    prog += H(2) # number=52
    prog += H(2) # number=5
    prog += H(3)  # number=6
    prog += H(4)  # number=21

    prog += H(0)  # number=1
    prog += H(1)  # number=2
    prog += H(2)  # number=7
    prog += H(3)  # number=8

    prog += H(0)  # number=28
        prog += CNOT(3,0) # number=53
        prog += Z(3) # number=54
        prog += CNOT(3,0) # number=55
Example #21
0
def make_circuit()-> Program:

    prog = Program() # circuit begin



    prog += H(0)  # number=3
    prog += H(1) # number=4
    prog += H(2) # number=5
    prog += H(3)  # number=6
    prog += H(0) # number=38
    prog += CZ(1,0) # number=39
    prog += H(0) # number=40
    prog += H(0) # number=51
    prog += CZ(1,0) # number=52
    prog += H(0) # number=53
    prog += CNOT(1,0) # number=54
    prog += Z(1) # number=55
    prog += CNOT(1,0) # number=56
    prog += H(0) # number=57
    prog += CZ(1,0) # number=58
    prog += H(0) # number=59
    prog += H(0) # number=32
    prog += CZ(1,0) # number=33
    prog += H(0) # number=34
    prog += H(4)  # number=21

    prog += H(0)  # number=1
    prog += H(1)  # number=2
    prog += H(2)  # number=7
    prog += H(3)  # number=8
        prog += CNOT(3,0) # number=41
        prog += Z(3) # number=42
        prog += CNOT(3,0) # number=43
        prog += CNOT(1,3) # number=44
        prog += CNOT(3,2) # number=45
Example #22
0
def controlled_modular_add_product(ancilla_cache, control, constant, modulus,
                                   multiplier, summand):
    """
    Performs a modular multiply-and-add by integer constants on a qubit register.
    Implements the map |x, y> ==> |x, y + a*x mod N> for the given modulus N,
    constant multiplier a, and summand y.

    Parameters:
        control (QubitPlaceholder): The control qubit
        constant (int): An integer "a" to be added to each basis state label
        modulus (int): The modulus "N" which addition and multiplication is taken with respect to.
        multiplier (list[QubitPlaceholder]): A quantum register representing an unsigned integer whose value is to
            be added to each basis state label of "summand".
        summand (list[QubitPlaceholder]): A quantum register representing an unsigned integer to use as the target
            for this operation.

    Remarks:
        See the Q# source for the "ModularAddProductLE" function at 
        https://github.com/Microsoft/QuantumLibraries/blob/master/Canon/src/Arithmetic/Arithmetic.qs
    """

    extra_zero_bit = None
    if not "extra_zero_bit" in ancilla_cache:
        extra_zero_bit = QubitPlaceholder()
        ancilla_cache["extra_zero_bit"] = extra_zero_bit
    else:
        extra_zero_bit = ancilla_cache["extra_zero_bit"]

    operation_args = (constant, modulus, multiplier)
    phase_summand = summand + [extra_zero_bit]
    program = Program()
    controlled_apply_phase_operation_on_register(
        ancilla_cache, program, control, controlled_modular_add_product_phase,
        phase_summand, operation_args)

    return program
Example #23
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += CNOT(0, 3)  # number=13
    prog += CNOT(0, 3)  # number=17
    prog += X(3)  # number=18
    prog += RX(-3.1101767270538954, 1)  # number=27
    prog += CNOT(0, 3)  # number=19
    prog += CNOT(0, 3)  # number=15

    prog += H(1)  # number=2
    prog += H(2)  # number=3
    prog += H(3)  # number=4
    prog += Y(3)  # number=12
    prog += H(1)  # number=26
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += X(3)  # number=29
    prog += H(2)  # number=7
    prog += H(0)  # number=30
    prog += CZ(3, 0)  # number=31
    prog += H(0)  # number=32
    prog += CNOT(3, 0)  # number=23
    prog += Z(3)  # number=24
    prog += CNOT(3, 0)  # number=25
    prog += CNOT(3, 0)  # number=22
    prog += H(3)  # number=8
    prog += Z(3)  # number=28
    prog += H(0)  # number=9
    prog += Y(2)  # number=10
    prog += Y(2)  # number=11
    # circuit end

    return prog
Example #24
0
def maxcut_qaoa_program(gamma: float) -> Program:
    """
    Generates a 2Q MAXCUT QAOA circuit with beta = pi/8 and with the provided
    gamma.

    Args:
        gamma: One of the two variational parameters (the other is fixed).
    Returns:
        A 2Q MAXCUT QAOA circuit with fixed beta and gamma.
    """
    q0, q1 = (0, 1)
    p = Program()
    p += H(q0)
    p += H(q1)
    p += CNOT(q0, q1)
    p += RZ(2 * gamma, q1)
    p += CNOT(q0, q1)
    p += H(q0)
    p += H(q1)
    p += RZ(np.pi / 4, q0)
    p += RZ(np.pi / 4, q1)
    p += H(q0)
    p += H(q1)
    return p
Example #25
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += H(0)  # number=1
    prog += RX(-0.09738937226128368, 2)  # number=2
    prog += H(1)  # number=3

    prog += CNOT(1, 0)  # number=4
    prog += Y(1)  # number=15
    prog += CNOT(1, 0)  # number=10
    prog += CNOT(0, 1)  # number=16
    prog += X(1)  # number=17
    prog += CNOT(0, 1)  # number=18
    prog += Z(1)  # number=11
    prog += CNOT(1, 0)  # number=12
    prog += Y(1)  # number=14
    prog += CNOT(1, 0)  # number=5
    prog += X(1)  # number=6
    prog += Z(1)  # number=8
    prog += X(1)  # number=7
    # circuit end

    return prog
Example #26
0
def make_circuit()-> Program:

    prog = Program() # circuit begin



    prog += H(0)  # number=3
    prog += H(1) # number=4
    prog += X(1) # number=48
    prog += H(1) # number=26
    prog += CZ(4,1) # number=27
    prog += H(1) # number=28
    prog += H(2) # number=5
    prog += H(3)  # number=6
    prog += H(4)  # number=21
    prog += H(1) # number=34
    prog += CZ(4,1) # number=35
    prog += Z(4) # number=46
    prog += RX(0.8011061266653969,2) # number=37
    prog += H(1) # number=36

    prog += H(0)  # number=1
    prog += H(1)  # number=2
    prog += H(2)  # number=7
    prog += H(3)  # number=8

    prog += H(0)  # number=49
    prog += CZ(1,0)  # number=50
    prog += H(0)  # number=51
    prog += X(0)  # number=39
    prog += CNOT(1,0)  # number=40
    prog += CNOT(0,1)  # number=42
    prog += X(1)  # number=43
    prog += CNOT(0,1)  # number=44
    prog += X(2)  # number=11
        prog += Y(1) # number=45
Example #27
0
def make_circuit()-> Program:

    prog = Program() # circuit begin



    prog += H(0)  # number=3
    prog += H(1) # number=4
    prog += H(2) # number=5
    prog += H(3)  # number=6
    prog += H(0) # number=41
    prog += CZ(1,0) # number=42
    prog += H(0) # number=43
    prog += Z(1) # number=37
    prog += H(0) # number=51
    prog += CZ(1,0) # number=52
    prog += H(0) # number=53
    prog += H(4)  # number=21
    prog += X(2) # number=39

    prog += H(0)  # number=1
    prog += H(1)  # number=2
    prog += H(2)  # number=7
    prog += H(3)  # number=8
        prog += H(0) # number=56
        prog += CZ(3,0) # number=57
        prog += H(0) # number=58
        prog += H(0) # number=48
        prog += CZ(3,0) # number=49
        prog += H(0) # number=50
        prog += Z(3) # number=46
        prog += CNOT(3,0) # number=47
        prog += X(4) # number=40
        prog += H(0) # number=59
        prog += CZ(3,0) # number=60
        prog += H(0) # number=61
Example #28
0
def make_circuit()-> Program:

    prog = Program() # circuit begin



    prog += H(0)  # number=3
    prog += CNOT(2,0) # number=45
    prog += Z(2) # number=46
    prog += H(0) # number=52
    prog += CZ(2,0) # number=53
    prog += H(0) # number=54
    prog += H(1) # number=4
    prog += RX(2.664070570244145,1) # number=39
    prog += H(2) # number=5
    prog += H(3)  # number=6
    prog += H(2) # number=49
    prog += CZ(3,2) # number=50
    prog += H(2) # number=51
    prog += H(4)  # number=21

    prog += H(0)  # number=1
        prog += H(3) # number=40
        prog += Y(4) # number=35
Example #29
0
def make_circuit() -> Program:

    prog = Program()  # circuit begin

    prog += H(0)  # number=1

    prog += Y(1)  # number=2
    prog += Y(1)  # number=4
    prog += Y(1)  # number=3
    prog += H(0)  # number=13
    prog += CZ(1, 0)  # number=14
    prog += H(0)  # number=15
    prog += X(0)  # number=8
    prog += H(0)  # number=18
    prog += CZ(1, 0)  # number=19
    prog += H(0)  # number=20
    prog += CNOT(1, 0)  # number=10
    prog += X(0)  # number=11
    prog += CNOT(1, 0)  # number=12
    prog += X(0)  # number=16
    prog += X(0)  # number=17
    # circuit end

    return prog
Example #30
0
def make_circuit()-> Program:

    prog = Program() # circuit begin

    prog += X(3) # number=1
    prog += H(0) # number=18
    prog += X(1) # number=28
    prog += CZ(3,0) # number=19
    prog += H(2) # number=24
    prog += H(0) # number=20
    prog += RX(-1.8378317023500288,1) # number=25
    prog += Z(3) # number=14
    prog += CNOT(3,0) # number=15

    prog += H(1) # number=2
    prog += H(3) # number=16
    prog += H(2) # number=3
    prog += H(3)  # number=4
    prog += H(0)  # number=5

    prog += H(1)  # number=6
    prog += H(2)  # number=7
    prog += H(3)  # number=8
    prog += H(0)  # number=9
    prog += H(3) # number=29
    prog += CZ(0,3) # number=30
    prog += H(3) # number=31
    prog += X(3) # number=22
    prog += CNOT(0,3) # number=23
    prog += Z(1) # number=26
    prog += X(2) # number=11
    prog += X(2) # number=12
    prog += Z(1) # number=27
    # circuit end

    return prog