Example #1
0
def test_decomposition_permutation_consistency(part_size, subgraph):
    gate = cca.BipartiteSwapNetworkGate(subgraph, part_size)
    qubits = cirq.LineQubit.range(2 * part_size)
    mapping = {q: i for i, q in enumerate(qubits)}
    cca.update_mapping(mapping, gate._decompose_(qubits))
    permutation = gate.permutation()
    assert {qubits[i]: j for i, j in permutation.items()} == mapping
Example #2
0
def test_bad_args():
    gate = cca.BipartiteSwapNetworkGate(cca.BipartiteGraphType.COMPLETE, 2)
    qubits = cirq.LineQubit.range(4)
    gate.subgraph = 'not a subgraph'
    args = cirq.CircuitDiagramInfoArgs(
        known_qubits=None,
        known_qubit_count=None,
        use_unicode_characters=True,
        precision=3,
        qubit_map=None,
    )
    with pytest.raises(NotImplementedError):
        gate._circuit_diagram_info_(args)

    args.known_qubit_count = 3
    with pytest.raises(ValueError):
        gate._circuit_diagram_info_(args)

    with pytest.raises(ValueError):
        gate._decompose_(qubits[:3])

    gate.subgraph = 'unimplemented subgraph'
    with pytest.raises(NotImplementedError):
        gate._decompose_(qubits)

    args.known_qubit_count = None
    with pytest.raises(NotImplementedError):
        gate._circuit_diagram_info_(args)
Example #3
0
def test_circuit_diagrams(part_size, subgraph):
    qubits = cirq.LineQubit.range(2 * part_size)
    gate = cca.BipartiteSwapNetworkGate(subgraph, part_size)
    circuit = cirq.Circuit(gate(*qubits))
    diagram = circuit_diagrams['undecomposed', subgraph, part_size]
    cirq.testing.assert_has_diagram(circuit, diagram)

    no_decomp = lambda op: isinstance(op.gate, (
        cca.AcquaintanceOpportunityGate, cca.SwapPermutationGate))
    circuit = cirq.expand_composite(circuit, no_decomp=no_decomp)
    diagram = circuit_diagrams['decomposed', subgraph, part_size]
    cirq.testing.assert_has_diagram(circuit, diagram)
Example #4
0
def test_repr(subgraph, part_size):
    gate = cca.BipartiteSwapNetworkGate(subgraph, part_size)
    cirq.testing.assert_equivalent_repr(gate)

    gate = cca.BipartiteSwapNetworkGate(subgraph, part_size, cirq.ZZ)
    cirq.testing.assert_equivalent_repr(gate)
Example #5
0
def test_bipartite_swap_network_acquaintance_size():
    qubits = cirq.LineQubit.range(4)
    gate = cca.BipartiteSwapNetworkGate(cca.BipartiteGraphType.COMPLETE, 2)
    assert cca.get_acquaintance_size(gate(*qubits)) == 2