示例#1
0
def test_circular_shift_gate_init():
    g = cca.CircularShiftGate(4, 2)
    assert g.num_qubits() == 4
    assert g.shift == 2

    g = cca.CircularShiftGate(4, 1, swap_gate=cirq.CZ)
    assert g.swap_gate == cirq.CZ
示例#2
0
def test_circular_shift_gate_permutation():
    assert (cca.CircularShiftGate(3, 4).permutation() ==
            {0: 2, 1: 0, 2: 1})
    assert (cca.CircularShiftGate(4, 0).permutation() ==
            {0: 0, 1: 1, 2: 2, 3: 3})

    assert (cca.CircularShiftGate(5, 2).permutation() ==
            {0:3, 1: 4, 2: 0, 3: 1, 4: 2})
示例#3
0
def test_circular_shift_gate_decomposition():
    qubits = [cirq.NamedQubit(q) for q in 'abcdef']

    expander = cirq.ExpandComposite()
    circular_shift = cca.CircularShiftGate(2, 1, cirq.CZ)(*qubits[:2])
    circuit = cirq.Circuit(circular_shift)
    expander.optimize_circuit(circuit)
    expected_circuit = cirq.Circuit(
            (cirq.Moment((cirq.CZ(*qubits[:2]),)),))
    assert circuit == expected_circuit

    no_decomp = lambda op: (isinstance(op, cirq.GateOperation) and
                            op.gate == cirq.SWAP)
    expander = cirq.ExpandComposite(no_decomp=no_decomp)

    circular_shift = cca.CircularShiftGate(6, 3)(*qubits)
    circuit = cirq.Circuit(circular_shift)
    expander.optimize_circuit(circuit)
    actual_text_diagram = circuit.to_text_diagram().strip()
    expected_text_diagram = """
a: ───────────×───────────
              │
b: ───────×───×───×───────
          │       │
c: ───×───×───×───×───×───
      │       │       │
d: ───×───×───×───×───×───
          │       │
e: ───────×───×───×───────
              │
f: ───────────×───────────
    """.strip()
    assert actual_text_diagram == expected_text_diagram

    circular_shift = cca.CircularShiftGate(6, 2)(*qubits)
    circuit = cirq.Circuit(circular_shift)
    expander.optimize_circuit(circuit)
    actual_text_diagram = circuit.to_text_diagram().strip()
    expected_text_diagram = """
a: ───────×───────────────
          │
b: ───×───×───×───────────
      │       │
c: ───×───×───×───×───────
          │       │
d: ───────×───×───×───×───
              │       │
e: ───────────×───×───×───
                  │
f: ───────────────×───────
    """.strip()
    assert actual_text_diagram == expected_text_diagram
示例#4
0
def test_circular_shift_gate_eq():
    equals_tester = cirq.testing.EqualsTester()
    equals_tester.add_equality_group(cca.CircularShiftGate(4, 1),
                                     cca.CircularShiftGate(4, 1))
    equals_tester.add_equality_group(
        cca.CircularShiftGate(4, 1, swap_gate=cirq.CZ))
    equals_tester.add_equality_group(cca.CircularShiftGate(4, 2))
    equals_tester.add_equality_group(cca.CircularShiftGate(3, 2))
    equals_tester.add_equality_group(
        cca.CircularShiftGate(3, 2, swap_gate=cirq.CZ))
示例#5
0
def test_circular_shift_gate_wire_symbols():
    qubits = [cirq.NamedQubit(q) for q in 'xyz']
    circuit = cirq.Circuit.from_ops(cca.CircularShiftGate(3, 2)(*qubits))
    actual_text_diagram = circuit.to_text_diagram().strip()
    expected_text_diagram = """
x: ───╲0╱───
      │
y: ───╲1╱───
      │
z: ───╱2╲───
    """.strip()
    assert actual_text_diagram == expected_text_diagram

    actual_text_diagram = circuit.to_text_diagram(use_unicode_characters=False)
    expected_text_diagram = r"""
x: ---\0/---
      |
y: ---\1/---
      |
z: ---/2\---
    """.strip()
    assert actual_text_diagram.strip() == expected_text_diagram
示例#6
0
def test_circular_shift_gate_repr():
    g = cca.CircularShiftGate(3, 2)
    cirq.testing.assert_equivalent_repr(g)
示例#7
0
def test_circular_shift_gate_eq():
    a = cca.CircularShiftGate(1)
    b = cca.CircularShiftGate(1)
    c = cca.CircularShiftGate(2)
    assert a == b
    assert a != c
示例#8
0
def test_circular_shift_gate_unknown_qubit_count():
    g = cca.CircularShiftGate(2)
    assert cirq.circuit_diagram_info(g, default=None) is None
示例#9
0
def test_circular_shift_gate_init():
    g = cca.CircularShiftGate(2)
    assert g.shift == 2

    g = cca.CircularShiftGate(1, swap_gate=cirq.CZ)
    assert g.swap_gate == cirq.CZ