コード例 #1
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0])) # number=9
    c.append(cirq.H.on(input_qubit[1]))  # number=2
    c.append(cirq.H.on(input_qubit[2]))  # number=3
    c.append(cirq.H.on(input_qubit[3]))  # number=4
    c.append(cirq.H.on(input_qubit[0]))  # number=5
    c.append(cirq.CNOT.on(input_qubit[0],input_qubit[3])) # number=28
    c.append(cirq.X.on(input_qubit[3])) # number=29
    c.append(cirq.CNOT.on(input_qubit[0],input_qubit[3])) # number=30
    c.append(cirq.H.on(input_qubit[1]))  # number=6
    c.append(cirq.X.on(input_qubit[1])) # number=25
    c.append(cirq.H.on(input_qubit[2]))  # number=7
    c.append(cirq.H.on(input_qubit[3]))  # number=8
    c.append(cirq.Z.on(input_qubit[1])) # number=21
    c.append(cirq.CNOT.on(input_qubit[0],input_qubit[3]))  # number=14
    c.append(cirq.X.on(input_qubit[3]))  # number=15
    c.append(cirq.rx(1.8001325905069514).on(input_qubit[3])) # number=18
    c.append(cirq.Z.on(input_qubit[1])) # number=27
    c.append(cirq.CNOT.on(input_qubit[0],input_qubit[3]))  # number=16
    c.append(cirq.H.on(input_qubit[1])) # number=22
    c.append(cirq.CNOT.on(input_qubit[2],input_qubit[0])) # number=10
    c.append(cirq.X.on(input_qubit[1])) # number=17
    c.append(cirq.CNOT.on(input_qubit[2],input_qubit[0])) # number=11
    c.append(cirq.Y.on(input_qubit[0])) # number=12
    c.append(cirq.Y.on(input_qubit[0])) # number=13
    c.append(cirq.Z.on(input_qubit[2])) # number=26
    c.append(cirq.CNOT.on(input_qubit[2],input_qubit[1])) # number=23
    c.append(cirq.X.on(input_qubit[0])) # number=19
    c.append(cirq.X.on(input_qubit[0])) # number=20
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #2
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=1
    c.append(cirq.H.on(input_qubit[1]))  # number=2
    c.append(cirq.H.on(input_qubit[2]))  # number=3
    c.append(cirq.H.on(input_qubit[3]))  # number=4
    c.append(cirq.SWAP.on(input_qubit[2], input_qubit[0]))  # number=5
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=16
    c.append(cirq.X.on(input_qubit[1]))  # number=17
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=18
    c.append(cirq.SWAP.on(input_qubit[2], input_qubit[0]))  # number=6
    c.append(cirq.rx(-1.0053096491487337).on(input_qubit[2]))  # number=10
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[3]))  # number=13
    c.append(cirq.X.on(input_qubit[3]))  # number=14
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[3]))  # number=15
    c.append(cirq.X.on(input_qubit[3]))  # number=9
    c.append(cirq.X.on(input_qubit[2]))  # number=11
    c.append(cirq.X.on(input_qubit[2]))  # number=12
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #3
0
def test_text_diagrams():
    a = cirq.NamedQubit('a')
    b = cirq.NamedQubit('b')
    circuit = cirq.Circuit(
        cirq.X(a),
        cirq.Y(a),
        cirq.Z(a),
        cirq.Z(a)**sympy.Symbol('x'),
        cirq.rx(sympy.Symbol('x')).on(a),
        cirq.CZ(a, b),
        cirq.CNOT(a, b),
        cirq.CNOT(b, a),
        cirq.H(a)**0.5,
        cirq.I(a),
        cirq.IdentityGate(2)(a, b),
        cirq.cphase(sympy.pi * sympy.Symbol('t')).on(a, b),
    )

    cirq.testing.assert_has_diagram(
        circuit,
        """
a: ───X───Y───Z───Z^x───Rx(x)───@───@───X───H^0.5───I───I───@─────
                                │   │   │               │   │
b: ─────────────────────────────@───X───@───────────────I───@^t───
""",
    )

    cirq.testing.assert_has_diagram(
        circuit,
        """
a: ---X---Y---Z---Z^x---Rx(x)---@---@---X---H^0.5---I---I---@-----
                                |   |   |               |   |
b: -----------------------------@---X---@---------------I---@^t---
""",
        use_unicode_characters=False,
    )
コード例 #4
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=1
    c.append(cirq.H.on(input_qubit[1]))  # number=2
    c.append(cirq.H.on(input_qubit[1]))  # number=7
    c.append(cirq.X.on(input_qubit[1]))  # number=10
    c.append(cirq.H.on(input_qubit[2]))  # number=3
    c.append(cirq.H.on(input_qubit[3]))  # number=4
    c.append(cirq.CNOT.on(input_qubit[3], input_qubit[0]))  # number=5
    c.append(cirq.H.on(input_qubit[3]))  # number=15
    c.append(cirq.CZ.on(input_qubit[2], input_qubit[3]))  # number=16
    c.append(cirq.H.on(input_qubit[3]))  # number=17
    c.append(cirq.H.on(input_qubit[0]))  # number=18
    c.append(cirq.CZ.on(input_qubit[3], input_qubit[0]))  # number=19
    c.append(cirq.H.on(input_qubit[0]))  # number=20
    c.append(cirq.rx(2.3027874150813186).on(input_qubit[1]))  # number=13
    c.append(cirq.SWAP.on(input_qubit[1], input_qubit[0]))  # number=8
    c.append(cirq.SWAP.on(input_qubit[1], input_qubit[0]))  # number=9
    c.append(cirq.SWAP.on(input_qubit[2], input_qubit[0]))  # number=11
    c.append(cirq.SWAP.on(input_qubit[2], input_qubit[0]))  # number=12
    # circuit end

    return c
コード例 #5
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=1

    c.append(cirq.Y.on(input_qubit[1]))  # number=2
    c.append(cirq.Y.on(input_qubit[1]))  # number=4
    c.append(cirq.Y.on(input_qubit[1]))  # number=3
    c.append(cirq.rx(2.0860175219836226).on(input_qubit[1]))  # number=7
    c.append(cirq.X.on(input_qubit[0]))  # number=5
    c.append(cirq.X.on(input_qubit[0]))  # number=6
    c.append(cirq.H.on(input_qubit[0]))  # number=10
    c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=11
    c.append(cirq.H.on(input_qubit[0]))  # number=12
    c.append(cirq.H.on(input_qubit[0]))  # number=13
    c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=14
    c.append(cirq.H.on(input_qubit[0]))  # number=15
    c.append(cirq.SWAP.on(input_qubit[1], input_qubit[0]))  # number=16
    c.append(cirq.SWAP.on(input_qubit[1], input_qubit[0]))  # number=17
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #6
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=9
    c.append(cirq.H.on(input_qubit[1]))  # number=2
    c.append(cirq.Y.on(input_qubit[3]))  # number=18
    c.append(cirq.H.on(input_qubit[2]))  # number=3
    c.append(cirq.H.on(input_qubit[3]))  # number=4
    c.append(cirq.Y.on(input_qubit[3]))  # number=12
    c.append(cirq.H.on(input_qubit[0]))  # number=5
    c.append(cirq.H.on(input_qubit[1]))  # number=6
    c.append(cirq.H.on(input_qubit[2]))  # number=7
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=28
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=31
    c.append(cirq.X.on(input_qubit[1]))  # number=32
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=33
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=30
    c.append(cirq.H.on(input_qubit[3]))  # number=8
    c.append(cirq.H.on(input_qubit[3]))  # number=19
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[3]))  # number=20
    c.append(cirq.H.on(input_qubit[3]))  # number=21
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[3]))  # number=23
    c.append(cirq.X.on(input_qubit[3]))  # number=24
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[3]))  # number=25
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[3]))  # number=17
    c.append(cirq.rx(-0.48380526865282825).on(input_qubit[3]))  # number=26
    c.append(cirq.Y.on(input_qubit[2]))  # number=10
    c.append(cirq.X.on(input_qubit[2]))  # number=22
    c.append(cirq.Y.on(input_qubit[2]))  # number=11
    c.append(cirq.X.on(input_qubit[0]))  # number=13
    c.append(cirq.X.on(input_qubit[0]))  # number=14
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #7
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=1
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[2]))  # number=11
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[2]))  # number=31
    c.append(cirq.X.on(input_qubit[2]))  # number=32
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[2]))  # number=33
    c.append(cirq.H.on(input_qubit[2]))  # number=25
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=26
    c.append(cirq.H.on(input_qubit[2]))  # number=27
    c.append(cirq.H.on(input_qubit[1]))  # number=7
    c.append(cirq.CZ.on(input_qubit[2], input_qubit[1]))  # number=8
    c.append(cirq.rx(-0.3989822670059037).on(input_qubit[1]))  # number=30
    c.append(cirq.H.on(input_qubit[1]))  # number=9
    c.append(cirq.H.on(input_qubit[1]))  # number=18
    c.append(cirq.CZ.on(input_qubit[2], input_qubit[1]))  # number=19
    c.append(cirq.H.on(input_qubit[1]))  # number=20
    c.append(cirq.Y.on(input_qubit[1]))  # number=14
    c.append(cirq.H.on(input_qubit[1]))  # number=22
    c.append(cirq.CZ.on(input_qubit[2], input_qubit[1]))  # number=23
    c.append(cirq.H.on(input_qubit[1]))  # number=24
    c.append(cirq.Z.on(input_qubit[2]))  # number=3
    c.append(cirq.X.on(input_qubit[1]))  # number=17
    c.append(cirq.Y.on(input_qubit[2]))  # number=5
    c.append(cirq.X.on(input_qubit[2]))  # number=21

    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=15
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=16
    c.append(cirq.X.on(input_qubit[2]))  # number=28
    c.append(cirq.X.on(input_qubit[2]))  # number=29
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #8
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=9
    c.append(cirq.H.on(input_qubit[1]))  # number=2
    c.append(cirq.H.on(input_qubit[2]))  # number=3
    c.append(cirq.H.on(input_qubit[2]))  # number=17
    c.append(cirq.H.on(input_qubit[3]))  # number=4
    c.append(cirq.H.on(input_qubit[0]))  # number=5
    c.append(cirq.H.on(input_qubit[1]))  # number=6
    c.append(cirq.H.on(input_qubit[2]))  # number=7
    c.append(cirq.H.on(input_qubit[3]))  # number=8
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[3]))  # number=10
    c.append(cirq.H.on(input_qubit[3]))  # number=30
    c.append(cirq.X.on(input_qubit[3]))  # number=11
    c.append(cirq.H.on(input_qubit[3]))  # number=13
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[3]))  # number=14
    c.append(cirq.H.on(input_qubit[1]))  # number=18
    c.append(cirq.CZ.on(input_qubit[3], input_qubit[1]))  # number=19
    c.append(cirq.Z.on(input_qubit[3]))  # number=25
    c.append(cirq.H.on(input_qubit[1]))  # number=20
    c.append(cirq.rx(-3.141592653589793).on(input_qubit[3]))  # number=26
    c.append(cirq.H.on(input_qubit[3]))  # number=15
    c.append(cirq.H.on(input_qubit[0]))  # number=27
    c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=28
    c.append(cirq.H.on(input_qubit[0]))  # number=29
    c.append(cirq.H.on(input_qubit[0]))  # number=31
    c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=32
    c.append(cirq.H.on(input_qubit[0]))  # number=33
    c.append(cirq.X.on(input_qubit[1]))  # number=23
    c.append(cirq.X.on(input_qubit[1]))  # number=24
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #9
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=1
    c.append(cirq.rx(-0.09738937226128368).on(input_qubit[2]))  # number=2
    c.append(cirq.H.on(input_qubit[1]))  # number=3

    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=4
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=10
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=15
    c.append(cirq.X.on(input_qubit[1]))  # number=16
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=17
    c.append(cirq.Z.on(input_qubit[1]))  # number=11
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=12
    c.append(cirq.Y.on(input_qubit[1]))  # number=14
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=5
    c.append(cirq.X.on(input_qubit[1]))  # number=6
    c.append(cirq.Z.on(input_qubit[1]))  # number=8
    c.append(cirq.X.on(input_qubit[1]))  # number=7
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #10
0
def test_rx_unitary():
    s = np.sqrt(0.5)
    np.testing.assert_allclose(cirq.unitary(cirq.rx(np.pi / 2)),
                               np.array([[s, -s * 1j], [-s * 1j, s]]))

    np.testing.assert_allclose(cirq.unitary(cirq.rx(-np.pi / 2)),
                               np.array([[s, s * 1j], [s * 1j, s]]))

    np.testing.assert_allclose(cirq.unitary(cirq.rx(0)),
                               np.array([[1, 0], [0, 1]]))

    np.testing.assert_allclose(cirq.unitary(cirq.rx(2 * np.pi)),
                               np.array([[-1, 0], [0, -1]]))

    np.testing.assert_allclose(cirq.unitary(cirq.rx(np.pi)),
                               np.array([[0, -1j], [-1j, 0]]))

    np.testing.assert_allclose(cirq.unitary(cirq.rx(-np.pi)),
                               np.array([[0, 1j], [1j, 0]]))
コード例 #11
0
ファイル: qaoa.py プロジェクト: AnimeshSinha1309/quantum-cirq
def qaoa_max_cut_unitary(qubits, betas, gammas,
                         graph):  # Nodes should be integers
    for beta, gamma in zip(betas, gammas):
        yield (rzz(-0.5 * gamma).on(qubits[i], qubits[j])
               for i, j in graph.edges)
        yield cirq.rx(2 * beta).on_each(*qubits)
コード例 #12
0
ファイル: serializer_test.py プロジェクト: yychuang/quantum
def _get_circuit_proto_pairs():
    q0 = cirq.GridQubit(0, 0)
    q1 = cirq.GridQubit(0, 1)

    pairs = [
        # HPOW and aliases.
        (cirq.Circuit(cirq.HPowGate(exponent=0.3)(q0)),
         _build_gate_proto("HP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.HPowGate(exponent=sympy.Symbol('alpha'))(q0)),
         _build_gate_proto("HP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.HPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0)),
         _build_gate_proto("HP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.H(q0)),
         _build_gate_proto("HP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0'])),

        # XPOW and aliases.
        (cirq.Circuit(cirq.XPowGate(exponent=0.3)(q0)),
         _build_gate_proto("XP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.XPowGate(exponent=sympy.Symbol('alpha'))(q0)),
         _build_gate_proto("XP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.XPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0)),
         _build_gate_proto("XP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.X(q0)),
         _build_gate_proto("XP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0'])),

        # YPOW and aliases
        (cirq.Circuit(cirq.YPowGate(exponent=0.3)(q0)),
         _build_gate_proto("YP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.YPowGate(exponent=sympy.Symbol('alpha'))(q0)),
         _build_gate_proto("YP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.YPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0)),
         _build_gate_proto("YP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.Y(q0)),
         _build_gate_proto("YP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0'])),

        # ZPOW and aliases.
        (cirq.Circuit(cirq.ZPowGate(exponent=0.3)(q0)),
         _build_gate_proto("ZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.ZPowGate(exponent=sympy.Symbol('alpha'))(q0)),
         _build_gate_proto("ZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.ZPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0)),
         _build_gate_proto("ZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0'])),
        (cirq.Circuit(cirq.Z(q0)),
         _build_gate_proto("ZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0'])),

        # XXPow and aliases
        (cirq.Circuit(cirq.XXPowGate(exponent=0.3)(q0, q1)),
         _build_gate_proto("XXP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.XXPowGate(exponent=sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("XXP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.XXPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("XXP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.XX(q0, q1)),
         _build_gate_proto("XXP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0', '0_1'])),

        # YYPow and aliases
        (cirq.Circuit(cirq.YYPowGate(exponent=0.3)(q0, q1)),
         _build_gate_proto("YYP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.YYPowGate(exponent=sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("YYP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.YYPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("YYP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.YY(q0, q1)),
         _build_gate_proto("YYP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0', '0_1'])),

        # ZZPow and aliases
        (cirq.Circuit(cirq.ZZPowGate(exponent=0.3)(q0, q1)),
         _build_gate_proto("ZZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.ZZPowGate(exponent=sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("ZZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.ZZPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("ZZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.ZZ(q0, q1)),
         _build_gate_proto("ZZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0', '0_1'])),

        # CZPow and aliases
        (cirq.Circuit(cirq.CZPowGate(exponent=0.3)(q0, q1)),
         _build_gate_proto("CZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.CZPowGate(exponent=sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("CZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.CZPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("CZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.CZ(q0, q1)),
         _build_gate_proto("CZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0', '0_1'])),

        # CNOTPow and aliases
        (cirq.Circuit(cirq.CNotPowGate(exponent=0.3)(q0, q1)),
         _build_gate_proto("CNP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.CNotPowGate(exponent=sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("CNP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.CNotPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("CNP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.CNOT(q0, q1)),
         _build_gate_proto("CNP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0', '0_1'])),

        # SWAPPow and aliases
        (cirq.Circuit(cirq.SwapPowGate(exponent=0.3)(q0, q1)),
         _build_gate_proto("SP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.SwapPowGate(exponent=sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("SP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.SwapPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("SP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.SWAP(q0, q1)),
         _build_gate_proto("SP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0', '0_1'])),

        # ISWAPPow and aliases
        (cirq.Circuit(cirq.ISwapPowGate(exponent=0.3)(q0, q1)),
         _build_gate_proto("ISP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [0.3, 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.ISwapPowGate(exponent=sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("ISP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 1.0, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.ISwapPowGate(exponent=3.1 * sympy.Symbol('alpha'))(q0, q1)),
         _build_gate_proto("ISP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           ['alpha', 3.1, 0.0], ['0_0', '0_1'])),
        (cirq.Circuit(cirq.ISWAP(q0, q1)),
         _build_gate_proto("ISP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, 0.0], ['0_0', '0_1'])),

        # PhasedXPow and aliases
        (cirq.Circuit(
            cirq.PhasedXPowGate(phase_exponent=0.9,
                                exponent=0.3,
                                global_shift=0.2)(q0)),
         _build_gate_proto("PXP", [
             'phase_exponent', 'phase_exponent_scalar', 'exponent',
             'exponent_scalar', 'global_shift'
         ], [0.9, 1.0, 0.3, 1.0, 0.2], ['0_0'])),
        (cirq.Circuit(
            cirq.PhasedXPowGate(phase_exponent=sympy.Symbol('alpha'),
                                exponent=0.3)(q0)),
         _build_gate_proto("PXP", [
             'phase_exponent', 'phase_exponent_scalar', 'exponent',
             'exponent_scalar', 'global_shift'
         ], ['alpha', 1.0, 0.3, 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(
            cirq.PhasedXPowGate(phase_exponent=3.1 * sympy.Symbol('alpha'),
                                exponent=0.3)(q0)),
         _build_gate_proto("PXP", [
             'phase_exponent', 'phase_exponent_scalar', 'exponent',
             'exponent_scalar', 'global_shift'
         ], ['alpha', 3.1, 0.3, 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(
            cirq.PhasedXPowGate(phase_exponent=0.9,
                                exponent=sympy.Symbol('beta'))(q0)),
         _build_gate_proto("PXP", [
             'phase_exponent', 'phase_exponent_scalar', 'exponent',
             'exponent_scalar', 'global_shift'
         ], [0.9, 1.0, 'beta', 1.0, 0.0], ['0_0'])),
        (cirq.Circuit(
            cirq.PhasedXPowGate(phase_exponent=0.9,
                                exponent=5.1 * sympy.Symbol('beta'))(q0)),
         _build_gate_proto("PXP", [
             'phase_exponent', 'phase_exponent_scalar', 'exponent',
             'exponent_scalar', 'global_shift'
         ], [0.9, 1.0, 'beta', 5.1, 0.0], ['0_0'])),
        (cirq.Circuit(
            cirq.PhasedXPowGate(phase_exponent=3.1 * sympy.Symbol('alpha'),
                                exponent=5.1 * sympy.Symbol('beta'))(q0)),
         _build_gate_proto("PXP", [
             'phase_exponent', 'phase_exponent_scalar', 'exponent',
             'exponent_scalar', 'global_shift'
         ], ['alpha', 3.1, 'beta', 5.1, 0.0], ['0_0'])),

        # RX, RY, RZ with symbolization is tested in special cases as the
        # string comparison of the float converted sympy.pi does not happen
        # smoothly. See: test_serialize_deserialize_special_case_one_qubit
        (cirq.Circuit(cirq.rx(np.pi)(q0)),
         _build_gate_proto("XP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, -0.5], ['0_0'])),
        (cirq.Circuit(cirq.ry(np.pi)(q0)),
         _build_gate_proto("YP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, -0.5], ['0_0'])),
        (cirq.Circuit(cirq.rz(np.pi)(q0)),
         _build_gate_proto("ZP",
                           ['exponent', 'exponent_scalar', 'global_shift'],
                           [1.0, 1.0, -0.5], ['0_0'])),

        # Identity
        (cirq.Circuit(cirq.I(q0)),
         _build_gate_proto("I", ['unused'], [True], ['0_0'])),

        # FSimGate
        (cirq.Circuit(cirq.FSimGate(theta=0.1, phi=0.2)(q0, q1)),
         _build_gate_proto("FSIM",
                           ['theta', 'theta_scalar', 'phi', 'phi_scalar'],
                           [0.1, 1.0, 0.2, 1.0], ['0_0', '0_1'])),
        (cirq.Circuit(
            cirq.FSimGate(theta=2.1 * sympy.Symbol("alpha"),
                          phi=1.3 * sympy.Symbol("beta"))(q0, q1)),
         _build_gate_proto("FSIM",
                           ['theta', 'theta_scalar', 'phi', 'phi_scalar'],
                           ['alpha', 2.1, 'beta', 1.3], ['0_0', '0_1'])),
    ]

    return pairs
コード例 #13
0
ファイル: serializer_test.py プロジェクト: yychuang/quantum
class SerializerTest(tf.test.TestCase, parameterized.TestCase):
    """Tests basic serializer functionality"""
    @parameterized.parameters(
        [{
            'circ_proto_pair': v
        } for v in _get_controlled_circuit_proto_pairs() +
         _get_circuit_proto_pairs() + _get_noise_proto_pairs()])
    def test_serialize_circuit_valid(self, circ_proto_pair):
        """Test conversion of cirq Circuits to tfq_gate_set proto."""
        self.assertProtoEquals(
            serializer.serialize_circuit(circ_proto_pair[0]),
            circ_proto_pair[1])

    @parameterized.parameters(
        [{
            'circ_proto_pair': v
        } for v in _get_controlled_circuit_proto_pairs() +
         _get_circuit_proto_pairs() + _get_noise_proto_pairs()])
    def test_deserialize_circuit_valid(self, circ_proto_pair):
        """Test deserialization of protos in tfq_gate_set."""

        # String casting is done here to round floating point values.
        # cirq.testing.assert_same_circuits will call  break and think
        # cirq.Z^0.30000001 is different from cirq.Z^0.3
        self.assertEqual(circ_proto_pair[0],
                         serializer.deserialize_circuit(circ_proto_pair[1]))

    @parameterized.parameters(
        [{
            'circ_proto_pair': v
        } for v in _get_controlled_circuit_proto_pairs() +
         _get_circuit_proto_pairs() + _get_noise_proto_pairs()])
    def test_serialize_deserialize_circuit_consistency(self, circ_proto_pair):
        """Ensure that serializing followed by deserializing works."""

        # String casting is done here to round floating point values.
        # cirq.testing.assert_same_circuits will call  break and think
        # cirq.Z^0.30000001 is different from cirq.Z^0.3
        self.assertProtoEquals(
            serializer.serialize_circuit(
                serializer.deserialize_circuit(circ_proto_pair[1])),
            circ_proto_pair[1])
        self.assertEqual(
            serializer.deserialize_circuit(
                serializer.serialize_circuit(circ_proto_pair[0])),
            circ_proto_pair[0])

    def test_serialize_circuit_unsupported_gate(self):
        """Ensure we error on unsupported gates."""
        q0 = cirq.GridQubit(0, 0)
        q1 = cirq.GridQubit(0, 1)
        unsupported_circuit = cirq.Circuit(cirq.QFT(q0, q1))

        with self.assertRaises(ValueError):
            serializer.serialize_circuit(unsupported_circuit)

    def test_serialize_circuit_with_large_identity(self):
        """Ensure that multi qubit identity errors correctly."""
        q0 = cirq.GridQubit(0, 0)
        q1 = cirq.GridQubit(0, 1)
        unsupported_circuit = cirq.Circuit(
            cirq.IdentityGate(num_qubits=2)(q0, q1))

        with self.assertRaisesRegex(ValueError, expected_regex="cirq.I"):
            serializer.serialize_circuit(unsupported_circuit)

    @parameterized.parameters([
        {
            "gate_with_param": g(p)
        }
        # Use a gate from each category of serializer
        for g in [
            # eigen
            lambda p: cirq.Circuit(
                cirq.HPowGate(exponent=p, global_shift=p)
                (cirq.GridQubit(0, 0))),
            # phased eigen
            lambda p: cirq.Circuit(
                cirq.PhasedXPowGate(
                    phase_exponent=p, exponent=p, global_shift=p)
                (cirq.GridQubit(0, 0))),
            # fsim
            lambda p: cirq.Circuit(
                cirq.FSimGate(theta=p, phi=p)
                (cirq.GridQubit(0, 0), cirq.GridQubit(0, 1))),
        ]
        # Attempt parameterization with a variety of numeric types
        for p in
        [0.35, float(0.35), 35e-2,
         np.float32(0.35),
         np.float64(0.35), 7]
    ])
    def test_serialize_circuit_valid_number_types(self, gate_with_param):
        """Tests number datatype support by our serializer."""
        self.assertAllClose(
            gate_with_param.unitary(),
            serializer.deserialize_circuit(
                serializer.serialize_circuit(gate_with_param)).unitary())

    def test_serialize_circuit_unsupported_value(self):
        """Ensure we error on unsupported arithmetic expressions and qubits."""
        q0 = cirq.GridQubit(0, 0)
        unsupported_circuit = cirq.Circuit(
            cirq.HPowGate()(q0)**(sympy.Symbol('alpha') + 1))

        q1 = cirq.NamedQubit('wont work')
        unsupported_circuit2 = cirq.Circuit(cirq.H(q1))

        with self.assertRaises(ValueError):
            serializer.serialize_circuit(unsupported_circuit)

        with self.assertRaises(ValueError):
            serializer.serialize_circuit(unsupported_circuit2)

    def test_serialize_controlled_circuit_unsupported_value(self):
        """Ensure serializing invalid controlled gates fails gracefully."""
        qubits = cirq.GridQubit.rect(1, 2)
        bad_qubit = cirq.LineQubit(5)
        invalid_control = cirq.Circuit(
            cirq.H(qubits[0]).controlled_by(qubits[1], bad_qubit))
        invalid_symbol = cirq.Circuit((cirq.HPowGate()(
            qubits[0])**(sympy.Symbol('alpha') + 1)).controlled_by(qubits[1]))
        with self.assertRaises(ValueError):
            serializer.serialize_circuit(invalid_control)
        with self.assertRaises(ValueError):
            serializer.serialize_circuit(invalid_symbol)

    def test_serialize_noise_channel_unsupported_value(self):
        """Ensure serializing invalid channels fails gracefully."""
        qubit = cirq.LineQubit(5)
        simple_circuit = cirq.Circuit(cirq.depolarize(0.3)(qubit))
        with self.assertRaises(ValueError):
            serializer.serialize_circuit(simple_circuit)

    @parameterized.parameters([{'inp': v} for v in ['wrong', 1.0, None, []]])
    def test_serialize_circuit_wrong_type(self, inp):
        """Attempt to serialize invalid objects types."""
        with self.assertRaises(TypeError):
            serializer.serialize_circuit(input)

    @parameterized.parameters([{'inp': v} for v in ['wrong', 1.0, None, []]])
    def test_deserialize_circuit_wrong_type(self, inp):
        """Attempt to deserialize invalid objects types."""
        with self.assertRaises(TypeError):
            serializer.deserialize_circuit(input)

    @parameterized.parameters([{'inp': v} for v in ['wrong', 1.0, None, []]])
    def test_serialize_paulisum_wrong_type(self, inp):
        """Attempt to serialize invalid object types."""
        with self.assertRaises(TypeError):
            serializer.serialize_paulisum(inp)

    @parameterized.parameters([{'inp': v} for v in ['wrong', 1.0, None, []]])
    def test_deserialize_paulisum_wrong_type(self, inp):
        """Attempt to deserialize invalid object types."""
        with self.assertRaises(TypeError):
            serializer.deserialize_paulisum(inp)

    def test_serialize_paulisum_invalid(self):
        """Ensure we don't support anything but GridQubits."""
        q0 = cirq.NamedQubit('wont work')
        a = 3.0 * cirq.Z(q0) - 2.0 * cirq.X(q0)
        with self.assertRaises(ValueError):
            serializer.serialize_paulisum(a)

    @parameterized.parameters([{
        'sum_proto_pair': v
    } for v in _get_valid_pauli_proto_pairs()])
    def test_serialize_paulisum_simple(self, sum_proto_pair):
        """Ensure serialization is correct."""
        self.assertProtoEquals(
            sum_proto_pair[1],
            serializer.serialize_paulisum(sum_proto_pair[0]))

    @parameterized.parameters([{
        'sum_proto_pair': v
    } for v in _get_valid_pauli_proto_pairs()])
    def test_deserialize_paulisum_simple(self, sum_proto_pair):
        """Ensure deserialization is correct."""
        self.assertEqual(serializer.deserialize_paulisum(sum_proto_pair[1]),
                         sum_proto_pair[0])

    @parameterized.parameters([{
        'sum_proto_pair': v
    } for v in _get_valid_pauli_proto_pairs()])
    def test_serialize_deserialize_paulisum_consistency(self, sum_proto_pair):
        """Serialize and deserialize and ensure nothing changed."""
        self.assertEqual(
            serializer.serialize_paulisum(
                serializer.deserialize_paulisum(sum_proto_pair[1])),
            sum_proto_pair[1])

        self.assertEqual(
            serializer.deserialize_paulisum(
                serializer.serialize_paulisum(sum_proto_pair[0])),
            sum_proto_pair[0])

    @parameterized.parameters([
        {
            'gate': cirq.rx(3.0 * sympy.Symbol('alpha'))
        },
        {
            'gate': cirq.ry(-1.0 * sympy.Symbol('alpha'))
        },
        {
            'gate': cirq.rz(sympy.Symbol('alpha'))
        },
    ])
    def test_serialize_deserialize_special_case_one_qubit(self, gate):
        """Check output state equality."""
        q0 = cirq.GridQubit(0, 0)
        c = cirq.Circuit(gate(q0))

        c = c._resolve_parameters_(cirq.ParamResolver({"alpha": 0.1234567}))
        before = c.unitary()
        c2 = serializer.deserialize_circuit(serializer.serialize_circuit(c))
        after = c2.unitary()
        self.assertAllClose(before, after)

    def test_terminal_measurement_support(self):
        """Test that non-terminal measurements error during serialization."""
        q0 = cirq.GridQubit(0, 0)
        q1 = cirq.GridQubit(0, 1)
        simple_circuit = cirq.Circuit(cirq.H(q0), cirq.measure(q0), cirq.H(q1),
                                      cirq.Z(q1), cirq.measure(q1))

        simple_circuit_before_call = copy.deepcopy(simple_circuit)

        expected_circuit = cirq.Circuit(cirq.Moment([cirq.H(q0),
                                                     cirq.H(q1)]),
                                        cirq.Moment([cirq.Z(q1)]),
                                        cirq.Moment([]))

        self.assertEqual(serializer.serialize_circuit(simple_circuit),
                         serializer.serialize_circuit(expected_circuit))

        # Check that serialization didn't modify existing circuit.
        self.assertEqual(simple_circuit, simple_circuit_before_call)

        invalid_circuit = cirq.Circuit(cirq.H(q0), cirq.measure(q0),
                                       cirq.measure(q0))

        with self.assertRaisesRegex(ValueError, expected_regex="non-terminal"):
            serializer.serialize_circuit(invalid_circuit)

    def test_serialize_deserialize_identity(self):
        """Confirm that identity gates can be serialized and deserialized."""
        q0 = cirq.GridQubit(0, 0)
        q1 = cirq.GridQubit(0, 1)
        paulisum_with_identity = cirq.PauliSum.from_pauli_strings([
            cirq.PauliString(cirq.I(q0)),
            cirq.PauliString(cirq.Z(q0), cirq.Z(q1)),
        ])
        self.assertEqual(
            paulisum_with_identity,
            serializer.deserialize_paulisum(
                serializer.serialize_paulisum(paulisum_with_identity)))
コード例 #14
0
def test_rxyz_circuit_diagram():
    q = cirq.NamedQubit('q')

    cirq.testing.assert_has_diagram(
        cirq.Circuit(
            cirq.rx(np.pi).on(q),
            cirq.rx(-np.pi).on(q),
            cirq.rx(-np.pi + 0.00001).on(q),
            cirq.rx(-np.pi - 0.00001).on(q),
            cirq.rx(3 * np.pi).on(q),
            cirq.rx(7 * np.pi / 2).on(q),
            cirq.rx(9 * np.pi / 2 + 0.00001).on(q),
        ),
        """
q: ───Rx(π)───Rx(-π)───Rx(-π)───Rx(-π)───Rx(-π)───Rx(-0.5π)───Rx(0.5π)───
    """,
    )

    cirq.testing.assert_has_diagram(
        cirq.Circuit(
            cirq.rx(np.pi).on(q),
            cirq.rx(np.pi / 2).on(q),
            cirq.rx(-np.pi + 0.00001).on(q),
            cirq.rx(-np.pi - 0.00001).on(q),
        ),
        """
q: ---Rx(pi)---Rx(0.5pi)---Rx(-pi)---Rx(-pi)---
        """,
        use_unicode_characters=False,
    )

    cirq.testing.assert_has_diagram(
        cirq.Circuit(
            cirq.ry(np.pi).on(q),
            cirq.ry(-np.pi).on(q),
            cirq.ry(3 * np.pi).on(q),
            cirq.ry(9 * np.pi / 2).on(q),
        ),
        """
q: ───Ry(π)───Ry(-π)───Ry(-π)───Ry(0.5π)───
    """,
    )

    cirq.testing.assert_has_diagram(
        cirq.Circuit(
            cirq.rz(np.pi).on(q),
            cirq.rz(-np.pi).on(q),
            cirq.rz(3 * np.pi).on(q),
            cirq.rz(9 * np.pi / 2).on(q),
            cirq.rz(9 * np.pi / 2 + 0.00001).on(q),
        ),
        """
q: ───Rz(π)───Rz(-π)───Rz(-π)───Rz(0.5π)───Rz(0.5π)───
    """,
    )
コード例 #15
0
    expected_matrix = get_matrix(expected)
    assert np.allclose(actual_matrix, expected_matrix)

    actual_expansion = cirq.pauli_expansion(actual)
    expected_expansion = cirq.pauli_expansion(expected)
    assert set(actual_expansion.keys()) == set(expected_expansion.keys())
    for name in actual_expansion.keys():
        assert abs(actual_expansion[name] - expected_expansion[name]) < 1e-12


@pytest.mark.parametrize('expression, expected_result', (
    ((cirq.X + cirq.Z) / np.sqrt(2), cirq.H),
    (cirq.X - cirq.Y, -cirq.Y + cirq.X),
    (cirq.X + cirq.S - cirq.X, cirq.S),
    (cirq.Y - 2 * cirq.Y, -cirq.Y),
    (cirq.rx(0.2), np.cos(0.1) * cirq.I - 1j * np.sin(0.1) * cirq.X),
    (1j * cirq.H * 1j, -cirq.H),
    (-1j * cirq.Y, cirq.ry(np.pi)),
    (np.sqrt(-1j) * cirq.S, cirq.rz(np.pi / 2)),
    (0.5 * (cirq.IdentityGate(2) + cirq.XX + cirq.YY + cirq.ZZ), cirq.SWAP),
    ((cirq.IdentityGate(2) + 1j *
      (cirq.XX + cirq.YY) + cirq.ZZ) / 2, cirq.ISWAP),
    (cirq.CNOT + 0 * cirq.SWAP, cirq.CNOT),
    (0.5 * cirq.FREDKIN, cirq.FREDKIN / 2),
    (cirq.FREDKIN * 0.5, cirq.FREDKIN / 2),
    (((cirq.X + cirq.Y) / np.sqrt(2))**2, cirq.I),
    ((cirq.X + cirq.Z)**3, 2 * (cirq.X + cirq.Z)),
    ((cirq.X + 1j * cirq.Y)**2, cirq.LinearCombinationOfGates({})),
    ((cirq.X - 1j * cirq.Y)**2, cirq.LinearCombinationOfGates({})),
    (((3 * cirq.X - 4 * cirq.Y + 12 * cirq.Z) / 13)**24, cirq.I),
    (((3 * cirq.X - 4 * cirq.Y + 12 * cirq.Z) / 13)**25,
コード例 #16
0
def uc(target):
	return [cirq.rx(1).on(target)]
コード例 #17
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=3
    c.append(cirq.H.on(input_qubit[1]))  # number=4
    c.append(cirq.H.on(input_qubit[2]))  # number=5
    c.append(cirq.H.on(input_qubit[1])) # number=29
    c.append(cirq.CZ.on(input_qubit[3],input_qubit[1])) # number=30
    c.append(cirq.H.on(input_qubit[1])) # number=31
    c.append(cirq.H.on(input_qubit[3]))  # number=6
    c.append(cirq.H.on(input_qubit[4]))  # number=21
    for i in range(2):
        c.append(cirq.H.on(input_qubit[0]))  # number=1
        c.append(cirq.H.on(input_qubit[1]))  # number=2
        c.append(cirq.H.on(input_qubit[2]))  # number=7
        c.append(cirq.H.on(input_qubit[3]))  # number=8

        c.append(cirq.H.on(input_qubit[0]))  # number=17
        c.append(cirq.H.on(input_qubit[1]))  # number=18
        c.append(cirq.H.on(input_qubit[2]))  # number=19
        c.append(cirq.H.on(input_qubit[3]))  # number=20

        c.append(cirq.H.on(input_qubit[0]))  # number=38
        c.append(cirq.CZ.on(input_qubit[1],input_qubit[0]))  # number=39
        c.append(cirq.H.on(input_qubit[0]))  # number=40
        c.append(cirq.H.on(input_qubit[0]))  # number=51
        c.append(cirq.CZ.on(input_qubit[1],input_qubit[0]))  # number=52
        c.append(cirq.H.on(input_qubit[0]))  # number=53
        c.append(cirq.H.on(input_qubit[0]))  # number=64
        c.append(cirq.CZ.on(input_qubit[1],input_qubit[0]))  # number=65
        c.append(cirq.H.on(input_qubit[0]))  # number=66
        c.append(cirq.X.on(input_qubit[0]))  # number=49
        c.append(cirq.H.on(input_qubit[0]))  # number=57
        c.append(cirq.CZ.on(input_qubit[1],input_qubit[0]))  # number=58
        c.append(cirq.H.on(input_qubit[0]))  # number=59
        c.append(cirq.H.on(input_qubit[0]))  # number=54
        c.append(cirq.CZ.on(input_qubit[1],input_qubit[0]))  # number=55
        c.append(cirq.H.on(input_qubit[0]))  # number=56
        c.append(cirq.H.on(input_qubit[4])) # number=41
        c.append(cirq.H.on(input_qubit[0]))  # number=61
        c.append(cirq.CZ.on(input_qubit[1],input_qubit[0]))  # number=62
        c.append(cirq.H.on(input_qubit[0]))  # number=63
        c.append(cirq.CNOT.on(input_qubit[0],input_qubit[1]))  # number=67
        c.append(cirq.X.on(input_qubit[1]))  # number=68
        c.append(cirq.CNOT.on(input_qubit[0],input_qubit[1]))  # number=69
        c.append(cirq.H.on(input_qubit[2]))  # number=25
        c.append(cirq.CZ.on(input_qubit[0],input_qubit[2]))  # number=26
        c.append(cirq.H.on(input_qubit[2]))  # number=27
        c.append(cirq.X.on(input_qubit[2]))  # number=23
        c.append(cirq.CNOT.on(input_qubit[0],input_qubit[2]))  # number=24
        c.append(cirq.CNOT.on(input_qubit[0],input_qubit[3]))  # number=32
        c.append(cirq.X.on(input_qubit[3]))  # number=33
        c.append(cirq.H.on(input_qubit[3]))  # number=42
        c.append(cirq.CZ.on(input_qubit[0],input_qubit[3]))  # number=43
        c.append(cirq.H.on(input_qubit[3]))  # number=44

        c.append(cirq.X.on(input_qubit[0]))  # number=13
        c.append(cirq.rx(0.6157521601035993).on(input_qubit[1])) # number=60
        c.append(cirq.X.on(input_qubit[1]))  # number=14
        c.append(cirq.X.on(input_qubit[2]))  # number=15
        c.append(cirq.X.on(input_qubit[3]))  # number=16

    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #18
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=3
    c.append(cirq.H.on(input_qubit[1]))  # number=4
    c.append(cirq.H.on(input_qubit[2]))  # number=5
    c.append(cirq.H.on(input_qubit[3]))  # number=6
    c.append(cirq.H.on(input_qubit[0]))  # number=38
    c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=39
    c.append(cirq.H.on(input_qubit[0]))  # number=40
    c.append(cirq.H.on(input_qubit[0]))  # number=49
    c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=50
    c.append(cirq.H.on(input_qubit[0]))  # number=51
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=52
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=56
    c.append(cirq.Z.on(input_qubit[1]))  # number=57
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=58
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=54
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=47
    c.append(cirq.H.on(input_qubit[0]))  # number=32
    c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=33
    c.append(cirq.H.on(input_qubit[0]))  # number=34
    c.append(cirq.X.on(input_qubit[4]))  # number=48
    c.append(cirq.H.on(input_qubit[4]))  # number=21
    for i in range(2):
        c.append(cirq.H.on(input_qubit[0]))  # number=1
        c.append(cirq.H.on(input_qubit[1]))  # number=2
        c.append(cirq.H.on(input_qubit[2]))  # number=7
        c.append(cirq.H.on(input_qubit[3]))  # number=8
        c.append(cirq.CNOT.on(input_qubit[3], input_qubit[0]))  # number=41
        c.append(cirq.Z.on(input_qubit[3]))  # number=42
        c.append(cirq.CNOT.on(input_qubit[3], input_qubit[0]))  # number=43
        c.append(cirq.CNOT.on(input_qubit[1], input_qubit[3]))  # number=44

        c.append(cirq.H.on(input_qubit[0]))  # number=17
        c.append(cirq.H.on(input_qubit[1]))  # number=18
        c.append(cirq.H.on(input_qubit[2]))  # number=19
        c.append(cirq.H.on(input_qubit[3]))  # number=20

        c.append(cirq.X.on(input_qubit[0]))  # number=9
        c.append(cirq.X.on(input_qubit[1]))  # number=10
        c.append(cirq.X.on(input_qubit[2]))  # number=11
        c.append(cirq.rx(-2.9845130209103035).on(input_qubit[4]))  # number=55
        c.append(cirq.CNOT.on(input_qubit[0], input_qubit[3]))  # number=35
        c.append(cirq.X.on(input_qubit[3]))  # number=36
        c.append(cirq.CNOT.on(input_qubit[0], input_qubit[3]))  # number=37

        c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=24
        c.append(cirq.X.on(input_qubit[0]))  # number=25
        c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=26
        c.append(cirq.X.on(input_qubit[1]))  # number=14
        c.append(cirq.X.on(input_qubit[2]))  # number=15
        c.append(cirq.X.on(input_qubit[3]))  # number=16

    c.append(cirq.X.on(input_qubit[1]))  # number=22
    c.append(cirq.X.on(input_qubit[1]))  # number=23
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #19
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=1
    c.append(cirq.H.on(input_qubit[2]))  # number=38
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=39
    c.append(cirq.H.on(input_qubit[2]))  # number=40
    c.append(cirq.H.on(input_qubit[2]))  # number=59
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=60
    c.append(cirq.H.on(input_qubit[2]))  # number=61
    c.append(cirq.H.on(input_qubit[2]))  # number=42
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=43
    c.append(cirq.H.on(input_qubit[2]))  # number=44
    c.append(cirq.H.on(input_qubit[2]))  # number=48
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=49
    c.append(cirq.H.on(input_qubit[2]))  # number=50
    c.append(cirq.H.on(input_qubit[2]))  # number=71
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=72
    c.append(cirq.H.on(input_qubit[2]))  # number=73
    c.append(cirq.X.on(input_qubit[2]))  # number=55
    c.append(cirq.H.on(input_qubit[2]))  # number=67
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=68
    c.append(cirq.H.on(input_qubit[2]))  # number=69
    c.append(cirq.H.on(input_qubit[2]))  # number=64
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=65
    c.append(cirq.H.on(input_qubit[2]))  # number=66
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[2]))  # number=37
    c.append(cirq.H.on(input_qubit[2]))  # number=51
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=52
    c.append(cirq.H.on(input_qubit[2]))  # number=53
    c.append(cirq.H.on(input_qubit[2]))  # number=25
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=26
    c.append(cirq.H.on(input_qubit[2]))  # number=27
    c.append(cirq.H.on(input_qubit[1]))  # number=7
    c.append(cirq.CZ.on(input_qubit[2], input_qubit[1]))  # number=8
    c.append(cirq.rx(0.17592918860102857).on(input_qubit[2]))  # number=34
    c.append(cirq.rx(-0.3989822670059037).on(input_qubit[1]))  # number=30
    c.append(cirq.H.on(input_qubit[1]))  # number=9
    c.append(cirq.H.on(input_qubit[1]))  # number=18
    c.append(cirq.rx(2.3310617489636263).on(input_qubit[2]))  # number=58
    c.append(cirq.CZ.on(input_qubit[2], input_qubit[1]))  # number=19
    c.append(cirq.H.on(input_qubit[1]))  # number=20
    c.append(cirq.X.on(input_qubit[1]))  # number=62
    c.append(cirq.Y.on(input_qubit[1]))  # number=14
    c.append(cirq.H.on(input_qubit[1]))  # number=22
    c.append(cirq.CZ.on(input_qubit[2], input_qubit[1]))  # number=23
    c.append(cirq.rx(-0.9173450548482197).on(input_qubit[1]))  # number=57
    c.append(cirq.CNOT.on(input_qubit[2], input_qubit[1]))  # number=63
    c.append(cirq.H.on(input_qubit[1]))  # number=24
    c.append(cirq.CNOT.on(input_qubit[2], input_qubit[0]))  # number=74
    c.append(cirq.Z.on(input_qubit[2]))  # number=75
    c.append(cirq.CNOT.on(input_qubit[2], input_qubit[0]))  # number=76
    c.append(cirq.CNOT.on(input_qubit[2], input_qubit[1]))  # number=70
    c.append(cirq.Z.on(input_qubit[1]))  # number=41
    c.append(cirq.X.on(input_qubit[1]))  # number=17
    c.append(cirq.Y.on(input_qubit[2]))  # number=5
    c.append(cirq.X.on(input_qubit[2]))  # number=21

    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=15
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=16
    c.append(cirq.X.on(input_qubit[2]))  # number=28
    c.append(cirq.X.on(input_qubit[2]))  # number=29
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #20
0
ファイル: qsimcirq_test.py プロジェクト: rmlarose/qsim
    def test_cirq_qsim_all_supported_gates(self):
        q0 = cirq.GridQubit(1, 1)
        q1 = cirq.GridQubit(1, 0)
        q2 = cirq.GridQubit(0, 1)
        q3 = cirq.GridQubit(0, 0)

        circuit = cirq.Circuit(
            cirq.Moment([
                cirq.H(q0),
                cirq.H(q1),
                cirq.H(q2),
                cirq.H(q3),
            ]),
            cirq.Moment([
                cirq.T(q0),
                cirq.T(q1),
                cirq.T(q2),
                cirq.T(q3),
            ]),
            cirq.Moment([
                cirq.CZPowGate(exponent=0.7, global_shift=0.2)(q0, q1),
                cirq.CXPowGate(exponent=1.2, global_shift=0.4)(q2, q3),
            ]),
            cirq.Moment([
                cirq.XPowGate(exponent=0.3, global_shift=1.1)(q0),
                cirq.YPowGate(exponent=0.4, global_shift=1)(q1),
                cirq.ZPowGate(exponent=0.5, global_shift=0.9)(q2),
                cirq.HPowGate(exponent=0.6, global_shift=0.8)(q3),
            ]),
            cirq.Moment([
                cirq.CX(q0, q2),
                cirq.CZ(q1, q3),
            ]),
            cirq.Moment([
                cirq.X(q0),
                cirq.Y(q1),
                cirq.Z(q2),
                cirq.S(q3),
            ]),
            cirq.Moment([
                cirq.XXPowGate(exponent=0.4, global_shift=0.7)(q0, q1),
                cirq.YYPowGate(exponent=0.8, global_shift=0.5)(q2, q3),
            ]),
            cirq.Moment([cirq.I(q0),
                         cirq.I(q1),
                         cirq.IdentityGate(2)(q2, q3)]),
            cirq.Moment([
                cirq.rx(0.7)(q0),
                cirq.ry(0.2)(q1),
                cirq.rz(0.4)(q2),
                cirq.PhasedXPowGate(phase_exponent=0.8,
                                    exponent=0.6,
                                    global_shift=0.3)(q3),
            ]),
            cirq.Moment([
                cirq.ZZPowGate(exponent=0.3, global_shift=1.3)(q0, q2),
                cirq.ISwapPowGate(exponent=0.6, global_shift=1.2)(q1, q3),
            ]),
            cirq.Moment([
                cirq.XPowGate(exponent=0.1, global_shift=0.9)(q0),
                cirq.YPowGate(exponent=0.2, global_shift=1)(q1),
                cirq.ZPowGate(exponent=0.3, global_shift=1.1)(q2),
                cirq.HPowGate(exponent=0.4, global_shift=1.2)(q3),
            ]),
            cirq.Moment([
                cirq.SwapPowGate(exponent=0.2, global_shift=0.9)(q0, q1),
                cirq.PhasedISwapPowGate(phase_exponent=0.8, exponent=0.6)(q2,
                                                                          q3),
            ]),
            cirq.Moment([
                cirq.PhasedXZGate(x_exponent=0.2,
                                  z_exponent=0.3,
                                  axis_phase_exponent=1.4)(q0),
                cirq.T(q1),
                cirq.H(q2),
                cirq.S(q3),
            ]),
            cirq.Moment([
                cirq.SWAP(q0, q2),
                cirq.XX(q1, q3),
            ]),
            cirq.Moment([
                cirq.rx(0.8)(q0),
                cirq.ry(0.9)(q1),
                cirq.rz(1.2)(q2),
                cirq.T(q3),
            ]),
            cirq.Moment([
                cirq.YY(q0, q1),
                cirq.ISWAP(q2, q3),
            ]),
            cirq.Moment([
                cirq.T(q0),
                cirq.Z(q1),
                cirq.Y(q2),
                cirq.X(q3),
            ]),
            cirq.Moment([
                cirq.FSimGate(0.3, 1.7)(q0, q2),
                cirq.ZZ(q1, q3),
            ]),
            cirq.Moment([
                cirq.ry(1.3)(q0),
                cirq.rz(0.4)(q1),
                cirq.rx(0.7)(q2),
                cirq.S(q3),
            ]),
            cirq.Moment([
                cirq.MatrixGate(
                    np.array([[0, -0.5 - 0.5j, -0.5 - 0.5j, 0],
                              [0.5 - 0.5j, 0, 0, -0.5 + 0.5j],
                              [0.5 - 0.5j, 0, 0, 0.5 - 0.5j],
                              [0, -0.5 - 0.5j, 0.5 + 0.5j, 0]]))(q0, q1),
                cirq.MatrixGate(
                    np.array([[0.5 - 0.5j, 0, 0, -0.5 + 0.5j],
                              [0, 0.5 - 0.5j, -0.5 + 0.5j, 0],
                              [0, -0.5 + 0.5j, -0.5 + 0.5j, 0],
                              [0.5 - 0.5j, 0, 0, 0.5 - 0.5j]]))(q2, q3),
            ]),
            cirq.Moment([
                cirq.MatrixGate(np.array([[1, 0], [0, 1j]]))(q0),
                cirq.MatrixGate(np.array([[0, -1j], [1j, 0]]))(q1),
                cirq.MatrixGate(np.array([[0, 1], [1, 0]]))(q2),
                cirq.MatrixGate(np.array([[1, 0], [0, -1]]))(q3),
            ]),
            cirq.Moment([
                cirq.riswap(0.7)(q0, q1),
                cirq.givens(1.2)(q2, q3),
            ]),
            cirq.Moment([
                cirq.H(q0),
                cirq.H(q1),
                cirq.H(q2),
                cirq.H(q3),
            ]),
        )

        simulator = cirq.Simulator()
        cirq_result = simulator.simulate(circuit)

        qsim_simulator = qsimcirq.QSimSimulator()
        qsim_result = qsim_simulator.simulate(circuit)

        assert cirq.linalg.allclose_up_to_global_phase(
            qsim_result.state_vector(), cirq_result.state_vector())
コード例 #21
0
import cirq
from cirq.contrib.svg.svg import tdd_to_svg
import sympy


if __name__ == "__main__":
    qubits = cirq.LineQubit.range(10)
    x = sympy.symbols("x0:10")
    thetas = sympy.symbols("t0:10")
    circuit = cirq.Circuit()

    for i in range(10):
        circuit.append(cirq.rx(x[i])(qubits[i]))
        circuit.append(cirq.ry(thetas[i])(qubits[i]))

    circuit.append(cirq.measure_each(*qubits))

    with open("simple_VQC.svg", "w") as file:
        file.write(
            tdd_to_svg(
                circuit.to_text_diagram_drawer(), ref_boxheight=40, ref_boxwidth=160,
            )
        )

コード例 #22
0
def qaoa_max_cut_unitary(qubits, p, graph):  # Nodes should be integers
    for index in range(p):
        yield (
            rzz(-0.5 * sympy.Symbol('gamma'+str(index))).on(qubits[i], qubits[j]) for i, j in graph.edges)
        yield cirq.rx(2 * sympy.Symbol('beta'+str(index))).on_each(*qubits)
コード例 #23
0
 def _build_qsp_sequence(self, q):
     self.append(cirq.Circuit(cirq.rz(self.phis[0])(q)))
     for phi in self.phis[1:]:
         c = cirq.Circuit(cirq.rx(self.theta)(q), cirq.rz(phi)(q))
         self.append(c)
コード例 #24
0
def bitfliplayer_mc(ci: Circuit, g: Graph, px: float, py: float,
                    pz: float) -> None:
    n = len(g.nodes)
    for i in range(n):
        ci.depolarizing(i, px=px, py=py, pz=pz)
    bitfliplayer.__repr__ = """bitfliplayer_mc"""  # type: ignore
    bitfliplayer.__trainable__ = True  # type: ignore


## below is similar layer but in cirq API instead of tensrocircuit native API
## special notes to the API, the arguments order are different due to historical reason

basis_rotation = {
    "x": (cirq.H, cirq.H),
    "y": (cirq.rx(-np.pi / 2), cirq.rx(np.pi / 2)),
    "z": None,
}


def generate_qubits(g: Graph) -> List[Any]:
    return sorted([v for _, v in g.nodes.data("qubit")])


def generate_cirq_double_gate(gates: str) -> None:
    d1, d2 = gates[0], gates[1]
    r1, r2 = basis_rotation[d1], basis_rotation[d2]

    def f(
        circuit: cirq.Circuit,
        qubit1: cirq.GridQubit,
コード例 #25
0
def test_non_diagrammable_subop():
    qbits = cirq.LineQubit.range(2)

    class UndiagrammableGate(cirq.SingleQubitGate):
        pass

    undiagrammable_op = UndiagrammableGate()(qbits[1])

    c_op = cirq.ControlledOperation(qbits[:1], undiagrammable_op)
    assert cirq.circuit_diagram_info(c_op, default=None) is None


@pytest.mark.parametrize('gate', [
    cirq.X(cirq.NamedQubit('q1')),
    cirq.X(cirq.NamedQubit('q1'))**0.5,
    cirq.rx(np.pi)(cirq.NamedQubit('q1')),
    cirq.rx(np.pi / 2)(cirq.NamedQubit('q1')),
    cirq.Z(cirq.NamedQubit('q1')),
    cirq.H(cirq.NamedQubit('q1')),
    cirq.CNOT(cirq.NamedQubit('q1'), cirq.NamedQubit('q2')),
    cirq.SWAP(cirq.NamedQubit('q1'), cirq.NamedQubit('q2')),
    cirq.CCZ(cirq.NamedQubit('q1'), cirq.NamedQubit('q2'),
             cirq.NamedQubit('q3')),
    cirq.ControlledGate(cirq.ControlledGate(
        cirq.CCZ))(*cirq.LineQubit.range(5)),
    GateUsingWorkspaceForApplyUnitary()(cirq.NamedQubit('q1')),
    GateAllocatingNewSpaceForResult()(cirq.NamedQubit('q1')),
])
def test_controlled_operation_is_consistent(gate: cirq.GateOperation):
    cb = cirq.NamedQubit('ctr')
    cgate = cirq.ControlledOperation([cb], gate)
コード例 #26
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=3
    c.append(cirq.H.on(input_qubit[1]))  # number=4
    c.append(cirq.H.on(input_qubit[2]))  # number=5
    c.append(cirq.H.on(input_qubit[3]))  # number=6
    c.append(cirq.H.on(input_qubit[3]))  # number=59
    c.append(cirq.H.on(input_qubit[4]))  # number=21
    c.append(cirq.H.on(input_qubit[0]))  # number=43
    c.append(cirq.CZ.on(input_qubit[4], input_qubit[0]))  # number=44
    c.append(cirq.H.on(input_qubit[0]))  # number=45
    c.append(cirq.H.on(input_qubit[0]))  # number=56
    c.append(cirq.CZ.on(input_qubit[4], input_qubit[0]))  # number=57
    c.append(cirq.H.on(input_qubit[0]))  # number=58
    c.append(cirq.Z.on(input_qubit[4]))  # number=47
    c.append(cirq.CNOT.on(input_qubit[4], input_qubit[0]))  # number=48
    c.append(cirq.H.on(input_qubit[0]))  # number=37
    c.append(cirq.CZ.on(input_qubit[4], input_qubit[0]))  # number=38
    c.append(cirq.H.on(input_qubit[0]))  # number=39
    for i in range(2):
        c.append(cirq.H.on(input_qubit[0]))  # number=1
        c.append(cirq.rx(-1.0430087609918113).on(input_qubit[4]))  # number=36
        c.append(cirq.H.on(input_qubit[1]))  # number=2
        c.append(cirq.H.on(input_qubit[2]))  # number=7
        c.append(cirq.H.on(input_qubit[3]))  # number=8

        c.append(cirq.H.on(input_qubit[0]))  # number=17
        c.append(cirq.rx(2.4912829742967055).on(input_qubit[2]))  # number=26
        c.append(cirq.H.on(input_qubit[1]))  # number=18
        c.append(cirq.H.on(input_qubit[2]))  # number=19
        c.append(cirq.H.on(input_qubit[2]))  # number=55
        c.append(cirq.H.on(input_qubit[2]))  # number=25
        c.append(cirq.H.on(input_qubit[3]))  # number=20

        c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=40
        c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=52
        c.append(cirq.X.on(input_qubit[0]))  # number=53
        c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=54
        c.append(cirq.H.on(input_qubit[0]))  # number=49
        c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=50
        c.append(cirq.H.on(input_qubit[0]))  # number=51
        c.append(cirq.X.on(input_qubit[1]))  # number=10
        c.append(cirq.rx(-0.06597344572538572).on(input_qubit[3]))  # number=27
        c.append(cirq.H.on(input_qubit[2]))  # number=60
        c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=61
        c.append(cirq.H.on(input_qubit[2]))  # number=62
        c.append(cirq.X.on(input_qubit[2]))  # number=23
        c.append(cirq.H.on(input_qubit[2]))  # number=28
        c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=29
        c.append(cirq.H.on(input_qubit[2]))  # number=30
        c.append(cirq.X.on(input_qubit[3]))  # number=12

        c.append(cirq.X.on(input_qubit[0]))  # number=13
        c.append(cirq.X.on(input_qubit[1]))  # number=14
        c.append(cirq.X.on(input_qubit[2]))  # number=15
        c.append(cirq.X.on(input_qubit[3]))  # number=16
        c.append(cirq.H.on(input_qubit[4]))  # number=35

    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #27
0
    cirq.testing.assert_allclose_up_to_global_phase(cirq.unitary(
        HALF_PI_GATE_SET.deserialize_op(proto)),
                                                    cirq.unitary(op),
                                                    atol=1e-6)


@pytest.mark.parametrize(
    ('gate', 'axis_half_turns', 'half_turns'),
    [
        (cirq.X**0.25, 0.0, 0.25),
        (cirq.Y**0.25, 0.5, 0.25),
        (cirq.XPowGate(exponent=0.125), 0.0, 0.125),
        (cirq.YPowGate(exponent=0.125), 0.5, 0.125),
        (cirq.PhasedXPowGate(exponent=0.125,
                             phase_exponent=0.25), 0.25, 0.125),
        (cirq.rx(0.125 * np.pi), 0.0, 0.125),
        (cirq.ry(0.25 * np.pi), 0.5, 0.25),
    ],
)
def test_serialize_deserialize_arbitrary_xy(gate, axis_half_turns, half_turns):
    op = gate.on(cirq.GridQubit(1, 2))
    expected = op_proto({
        'gate': {
            'id': 'xy'
        },
        'args': {
            'axis_half_turns': {
                'arg_value': {
                    'float_value': axis_half_turns
                }
            },
コード例 #28
0
ファイル: startCirq1710.py プロジェクト: wjy99-c/QDiff
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=3
    c.append(cirq.rx(-1.3603096190043806).on(input_qubit[2]))  # number=28
    c.append(cirq.H.on(input_qubit[1]))  # number=4
    c.append(cirq.H.on(input_qubit[2]))  # number=5
    c.append(cirq.H.on(input_qubit[3]))  # number=6
    c.append(cirq.H.on(input_qubit[4]))  # number=21
    for i in range(2):
        c.append(cirq.H.on(input_qubit[0]))  # number=1
        c.append(cirq.H.on(input_qubit[1]))  # number=2
        c.append(cirq.H.on(input_qubit[2]))  # number=7
        c.append(cirq.H.on(input_qubit[3]))  # number=8
        c.append(cirq.H.on(input_qubit[3]))  # number=34
        c.append(cirq.CZ.on(input_qubit[4], input_qubit[3]))  # number=35
        c.append(cirq.H.on(input_qubit[3]))  # number=36

        c.append(cirq.H.on(input_qubit[0]))  # number=17
        c.append(cirq.H.on(input_qubit[1]))  # number=18
        c.append(cirq.H.on(input_qubit[2]))  # number=53
        c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=54
        c.append(cirq.H.on(input_qubit[2]))  # number=55
        c.append(cirq.CNOT.on(input_qubit[0], input_qubit[2]))  # number=56
        c.append(cirq.X.on(input_qubit[2]))  # number=57
        c.append(cirq.CNOT.on(input_qubit[0], input_qubit[2]))  # number=58
        c.append(cirq.H.on(input_qubit[2]))  # number=47
        c.append(cirq.CZ.on(input_qubit[0], input_qubit[2]))  # number=48
        c.append(cirq.H.on(input_qubit[2]))  # number=49
        c.append(cirq.rx(-1.9697785938008003).on(input_qubit[1]))  # number=37
        c.append(cirq.H.on(input_qubit[2]))  # number=19
        c.append(cirq.H.on(input_qubit[3]))  # number=20

        c.append(cirq.H.on(input_qubit[0]))  # number=38
        c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=39
        c.append(cirq.H.on(input_qubit[0]))  # number=40
        c.append(cirq.X.on(input_qubit[0]))  # number=32
        c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=33
        c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=24
        c.append(cirq.X.on(input_qubit[1]))  # number=25
        c.append(cirq.X.on(input_qubit[1]))  # number=41
        c.append(cirq.H.on(input_qubit[1]))  # number=50
        c.append(cirq.CZ.on(input_qubit[0], input_qubit[1]))  # number=51
        c.append(cirq.H.on(input_qubit[1]))  # number=52
        c.append(cirq.X.on(input_qubit[2]))  # number=11
        c.append(cirq.CNOT.on(input_qubit[2], input_qubit[3]))  # number=30
        c.append(cirq.X.on(input_qubit[3]))  # number=12
        c.append(cirq.H.on(input_qubit[2]))  # number=42

        c.append(cirq.X.on(input_qubit[0]))  # number=13
        c.append(cirq.X.on(input_qubit[1]))  # number=14
        c.append(cirq.X.on(input_qubit[2]))  # number=15
        c.append(cirq.X.on(input_qubit[4]))  # number=46
        c.append(cirq.X.on(input_qubit[3]))  # number=16

    c.append(cirq.X.on(input_qubit[1]))  # number=22
    c.append(cirq.X.on(input_qubit[1]))  # number=23
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #29
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=1
    c.append(cirq.H.on(input_qubit[1]))  # number=70
    c.append(cirq.rx(-0.09738937226128368).on(input_qubit[2]))  # number=2
    c.append(cirq.H.on(input_qubit[1]))  # number=33
    c.append(cirq.Y.on(input_qubit[2]))  # number=56
    c.append(cirq.CZ.on(input_qubit[2], input_qubit[1]))  # number=34
    c.append(cirq.H.on(input_qubit[1]))  # number=35
    c.append(cirq.H.on(input_qubit[1]))  # number=3

    c.append(cirq.H.on(input_qubit[0]))  # number=45
    c.append(cirq.CNOT.on(input_qubit[2], input_qubit[1]))  # number=60
    c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=46
    c.append(cirq.H.on(input_qubit[0]))  # number=47
    c.append(cirq.Y.on(input_qubit[1]))  # number=15
    c.append(cirq.H.on(input_qubit[0]))  # number=66
    c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=67
    c.append(cirq.H.on(input_qubit[0]))  # number=68
    c.append(cirq.H.on(input_qubit[1]))  # number=19
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[1]))  # number=20
    c.append(cirq.rx(-0.6000441968356504).on(input_qubit[1]))  # number=28
    c.append(cirq.H.on(input_qubit[1]))  # number=21
    c.append(cirq.H.on(input_qubit[1]))  # number=30
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[1]))  # number=31
    c.append(cirq.H.on(input_qubit[1]))  # number=32
    c.append(cirq.H.on(input_qubit[1]))  # number=57
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[1]))  # number=58
    c.append(cirq.H.on(input_qubit[1]))  # number=59
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=51
    c.append(cirq.X.on(input_qubit[1]))  # number=52
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=53
    c.append(cirq.CNOT.on(input_qubit[0], input_qubit[1]))  # number=50
    c.append(cirq.Y.on(input_qubit[2]))  # number=69
    c.append(cirq.H.on(input_qubit[2]))  # number=29
    c.append(cirq.H.on(input_qubit[1]))  # number=36
    c.append(cirq.X.on(input_qubit[1]))  # number=64
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[1]))  # number=37
    c.append(cirq.Y.on(input_qubit[2]))  # number=44
    c.append(cirq.H.on(input_qubit[1]))  # number=38
    c.append(cirq.Z.on(input_qubit[1]))  # number=55
    c.append(cirq.H.on(input_qubit[1]))  # number=61
    c.append(cirq.CZ.on(input_qubit[0], input_qubit[1]))  # number=62
    c.append(cirq.CNOT.on(input_qubit[2], input_qubit[0]))  # number=71
    c.append(cirq.Z.on(input_qubit[2]))  # number=72
    c.append(cirq.CNOT.on(input_qubit[2], input_qubit[0]))  # number=73
    c.append(cirq.H.on(input_qubit[1]))  # number=63
    c.append(cirq.Z.on(input_qubit[1]))  # number=11
    c.append(cirq.rx(-1.1780972450961724).on(input_qubit[2]))  # number=54
    c.append(cirq.H.on(input_qubit[1]))  # number=42
    c.append(cirq.H.on(input_qubit[0]))  # number=39
    c.append(cirq.CZ.on(input_qubit[1], input_qubit[0]))  # number=40
    c.append(cirq.H.on(input_qubit[0]))  # number=41
    c.append(cirq.CNOT.on(input_qubit[2], input_qubit[1]))  # number=26
    c.append(cirq.Y.on(input_qubit[1]))  # number=14
    c.append(cirq.CNOT.on(input_qubit[1], input_qubit[0]))  # number=5
    c.append(cirq.X.on(input_qubit[1]))  # number=6
    c.append(cirq.Z.on(input_qubit[1]))  # number=8
    c.append(cirq.X.on(input_qubit[1]))  # number=7
    c.append(cirq.H.on(input_qubit[2]))  # number=43
    c.append(cirq.rx(-2.42845112122491).on(input_qubit[1]))  # number=25
    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c
コード例 #30
0
def make_circuit(n: int, input_qubit):
    c = cirq.Circuit()  # circuit begin

    c.append(cirq.H.on(input_qubit[0]))  # number=3
    c.append(cirq.H.on(input_qubit[1]))  # number=4
    c.append(cirq.CNOT.on(input_qubit[4],input_qubit[0])) # number=54
    c.append(cirq.Z.on(input_qubit[4])) # number=55
    c.append(cirq.CNOT.on(input_qubit[4],input_qubit[0])) # number=56
    c.append(cirq.H.on(input_qubit[2])) # number=50
    c.append(cirq.CZ.on(input_qubit[4],input_qubit[2])) # number=51
    c.append(cirq.H.on(input_qubit[2])) # number=52
    c.append(cirq.H.on(input_qubit[2]))  # number=5
    c.append(cirq.H.on(input_qubit[3]))  # number=6
    c.append(cirq.H.on(input_qubit[4]))  # number=21
    for i in range(2):
        c.append(cirq.H.on(input_qubit[0]))  # number=1
        c.append(cirq.H.on(input_qubit[1]))  # number=2
        c.append(cirq.H.on(input_qubit[2]))  # number=7
        c.append(cirq.H.on(input_qubit[3]))  # number=8

        c.append(cirq.H.on(input_qubit[0]))  # number=17
        c.append(cirq.H.on(input_qubit[1]))  # number=18
        c.append(cirq.H.on(input_qubit[2]))  # number=19
        c.append(cirq.H.on(input_qubit[3]))  # number=20

        c.append(cirq.H.on(input_qubit[0]))  # number=28
        c.append(cirq.CNOT.on(input_qubit[3],input_qubit[0])) # number=57
        c.append(cirq.Z.on(input_qubit[3])) # number=58
        c.append(cirq.CNOT.on(input_qubit[3],input_qubit[0])) # number=59
        c.append(cirq.CZ.on(input_qubit[1],input_qubit[0]))  # number=29
        c.append(cirq.H.on(input_qubit[0]))  # number=30
        c.append(cirq.H.on(input_qubit[0]))  # number=43
        c.append(cirq.CZ.on(input_qubit[1],input_qubit[0]))  # number=44
        c.append(cirq.H.on(input_qubit[0]))  # number=45
        c.append(cirq.CNOT.on(input_qubit[1],input_qubit[0]))  # number=35
        c.append(cirq.CNOT.on(input_qubit[1],input_qubit[0]))  # number=38
        c.append(cirq.X.on(input_qubit[0]))  # number=39
        c.append(cirq.CNOT.on(input_qubit[1],input_qubit[0]))  # number=40
        c.append(cirq.CNOT.on(input_qubit[1],input_qubit[0]))  # number=37
        c.append(cirq.H.on(input_qubit[0]))  # number=46
        c.append(cirq.CZ.on(input_qubit[1],input_qubit[0]))  # number=47
        c.append(cirq.H.on(input_qubit[0]))  # number=48
        c.append(cirq.CNOT.on(input_qubit[1],input_qubit[0]))  # number=27
        c.append(cirq.X.on(input_qubit[1]))  # number=10
        c.append(cirq.X.on(input_qubit[2]))  # number=11
        c.append(cirq.X.on(input_qubit[3]))  # number=12

        c.append(cirq.X.on(input_qubit[0]))  # number=13
        c.append(cirq.CNOT.on(input_qubit[0],input_qubit[1]))  # number=22
        c.append(cirq.Y.on(input_qubit[2])) # number=41
        c.append(cirq.X.on(input_qubit[1]))  # number=23
        c.append(cirq.CNOT.on(input_qubit[0],input_qubit[1]))  # number=24
        c.append(cirq.rx(1.0398671683382215).on(input_qubit[2])) # number=31
        c.append(cirq.X.on(input_qubit[2]))  # number=15
        c.append(cirq.X.on(input_qubit[3]))  # number=16

    # circuit end

    c.append(cirq.measure(*input_qubit, key='result'))

    return c