コード例 #1
0
def test_remove_redundant_acquaintance_opportunities():
    a, b, c, d, e = cirq.LineQubit.range(5)
    swap = cca.SwapPermutationGate()

    ops = [cca.acquaint(a, b), cca.acquaint(a, b)]
    strategy = cirq.Circuit(ops)
    diagram_before = """
0: ───█───█───
      │   │
1: ───█───█───
    """
    ct.assert_has_diagram(strategy, diagram_before)
    cca.remove_redundant_acquaintance_opportunities(strategy)
    diagram_after = """
0: ───█───────
      │
1: ───█───────
    """
    ct.assert_has_diagram(strategy, diagram_after)

    ops = [
        cca.acquaint(a, b),
        cca.acquaint(c, d),
        swap(d, e),
        swap(c, d),
        cca.acquaint(d, e)
    ]
    strategy = cirq.Circuit(ops)
    diagram_before = """
0: ───█───────────────────
      │
1: ───█───────────────────

2: ───█─────────0↦1───────
      │         │
3: ───█───0↦1───1↦0───█───
          │           │
4: ───────1↦0─────────█───
    """
    ct.assert_has_diagram(strategy, diagram_before)
    cca.remove_redundant_acquaintance_opportunities(strategy)
    diagram_after = """
0: ───█───────────────────
      │
1: ───█───────────────────

2: ───█─────────0↦1───────
      │         │
3: ───█───0↦1───1↦0───────
          │
4: ───────1↦0─────────────
    """
    ct.assert_has_diagram(strategy, diagram_after)
コード例 #2
0
ファイル: gates_test.py プロジェクト: ybc1991/Cirq
def test_get_acquaintance_size():
    qubits = cirq.LineQubit.range(8)
    op = OtherOperation(qubits)
    assert op.with_qubits(qubits) == op
    assert cca.get_acquaintance_size(op) == 0

    for s, _ in enumerate(qubits):
        op = cca.acquaint(*qubits[:s + 1])
        assert cca.get_acquaintance_size(op) == s + 1

    part_lens = (2, 2, 2, 2)
    acquaintance_size = 3
    gate = cca.SwapNetworkGate(part_lens, acquaintance_size)
    op = gate(*qubits[:sum(part_lens)])
    assert cca.get_acquaintance_size(op) == 3

    part_lens = (2, 2, 2, 2)
    acquaintance_size = 4
    gate = cca.SwapNetworkGate(part_lens, acquaintance_size)
    op = gate(*qubits[:sum(part_lens)])
    assert cca.get_acquaintance_size(op) == 0

    part_lens = (2, 2, 2, 2)
    acquaintance_size = 1
    gate = cca.SwapNetworkGate(part_lens, acquaintance_size)
    op = gate(*qubits[:sum(part_lens)])
    assert cca.get_acquaintance_size(op) == 0

    part_lens = (2, 2, 2, 2)
    acquaintance_size = 1
    gate = cca.SwapNetworkGate(part_lens, acquaintance_size)
    op = gate(*qubits[:sum(part_lens)])
    assert cca.get_acquaintance_size(op) == 0
コード例 #3
0
ファイル: mutation_utils_test.py プロジェクト: ybc1991/Cirq
def test_rectification():
    qubits = cirq.LineQubit.range(4)

    with pytest.raises(TypeError):
        cca.rectify_acquaintance_strategy(cirq.Circuit())

    perm_gate = cca.SwapPermutationGate()
    operations = [
        perm_gate(*qubits[:2]),
        cca.acquaint(*qubits[2:]),
        cca.acquaint(*qubits[:2]),
        perm_gate(*qubits[2:]),
    ]

    strategy = cirq.Circuit(operations,
                            device=cca.UnconstrainedAcquaintanceDevice)
    cca.rectify_acquaintance_strategy(strategy)
    actual_text_diagram = strategy.to_text_diagram().strip()
    expected_text_diagram = """
0: ───────0↦1─────────█───
          │           │
1: ───────1↦0─────────█───

2: ───█─────────0↦1───────
      │         │
3: ───█─────────1↦0───────
    """.strip()
    assert actual_text_diagram == expected_text_diagram

    strategy = cirq.Circuit(operations,
                            device=cca.UnconstrainedAcquaintanceDevice)
    cca.rectify_acquaintance_strategy(strategy, False)
    actual_text_diagram = strategy.to_text_diagram()
    expected_text_diagram = """
0: ───0↦1───────█─────────
      │         │
1: ───1↦0───────█─────────

2: ─────────█───────0↦1───
            │       │
3: ─────────█───────1↦0───
    """.strip()
    assert actual_text_diagram == expected_text_diagram
コード例 #4
0
ファイル: devices_test.py プロジェクト: PWJ1900/Rlearncirq
def test_acquaintance_device():
    with pytest.raises(ValueError):
        op = cirq.X(cirq.NamedQubit('q'))
        cca.UnconstrainedAcquaintanceDevice.validate_operation(op)

    qubits = cirq.LineQubit.range(4)
    swap_network = cca.SwapNetworkGate((1, 2, 1))
    cca.UnconstrainedAcquaintanceDevice.validate_operation(
        cca.acquaint(*qubits[:2]))
    cca.UnconstrainedAcquaintanceDevice.validate_operation(
        swap_network(*qubits))
コード例 #5
0
ファイル: gates_test.py プロジェクト: ybc1991/Cirq
def test_acquaintance_gate_text_diagram_info():
    qubits = [cirq.NamedQubit(s) for s in 'xyz']
    circuit = cirq.Circuit([cirq.Moment([cca.acquaint(*qubits)])])
    actual_text_diagram = circuit.to_text_diagram().strip()
    expected_text_diagram = """
x: ───█───
      │
y: ───█───
      │
z: ───█───
    """.strip()
    assert actual_text_diagram == expected_text_diagram
コード例 #6
0
def test_remove_redundant_acquaintance_opportunities():
    device = cca.UnconstrainedAcquaintanceDevice
    a, b, c, d, e = cirq.LineQubit.range(5)
    swap = cca.SwapPermutationGate()

    with pytest.raises(TypeError):
        ops = [cca.acquaint(a, b)]
        strategy = cirq.Circuit.from_ops(ops)
        cca.remove_redundant_acquaintance_opportunities(strategy)

    ops = [cca.acquaint(a, b), cca.acquaint(a, b)]
    strategy = cirq.Circuit.from_ops(ops, device=device)
    diagram_before = """
0: ───█───█───
      │   │
1: ───█───█───
    """
    ct.assert_has_diagram(strategy, diagram_before)
    cca.remove_redundant_acquaintance_opportunities(strategy)
    cca.remove_redundant_acquaintance_opportunities(strategy)
    diagram_after = """
0: ───█───────
      │
1: ───█───────
    """
    ct.assert_has_diagram(strategy, diagram_after)

    ops = [
        cca.acquaint(a, b),
        cca.acquaint(c, d),
        swap(d, e),
        swap(c, d),
        cca.acquaint(d, e)
    ]
    strategy = cirq.Circuit.from_ops(ops, device=device)
    diagram_before = """
0: ───█───────────────────
      │
1: ───█───────────────────

2: ───█─────────0↦1───────
      │         │
3: ───█───0↦1───1↦0───█───
          │           │
4: ───────1↦0─────────█───
    """
    ct.assert_has_diagram(strategy, diagram_before)
    cca.remove_redundant_acquaintance_opportunities(strategy)
    diagram_after = """
0: ───█───────────────────
      │
1: ───█───────────────────

2: ───█─────────0↦1───────
      │         │
3: ───█───0↦1───1↦0───────
          │
4: ───────1↦0─────────────
    """
    ct.assert_has_diagram(strategy, diagram_after)