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
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)
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)
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)
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