Exemplo n.º 1
0
    def test_run(self) -> None:
        """Test run with a linear topology."""
        #     0  1  2  3  4        #########
        # 0 --o-----o--P--P--    --#-o---o-#-----#######--
        # 1 --x--o--x--o-----    --#-x-o-x-#######-o---#--
        # 2 -----x--o--x--o-- => --#---x---#---o-#-x-o-#--
        # 3 --o--P--x--P--x--    --#########-o-x-#---x-#--
        # 4 --x-----------P--    ----------#-x---#######--
        #                                  #######

        num_q = 5
        circ = Circuit(num_q)
        circ.append_gate(CNOTGate(), [0, 1])
        circ.append_gate(CNOTGate(), [3, 4])
        circ.append_gate(CNOTGate(), [1, 2])
        circ.append_gate(CNOTGate(), [0, 1])
        circ.append_gate(CNOTGate(), [2, 3])
        circ.append_gate(CNOTGate(), [1, 2])
        circ.append_gate(CNOTGate(), [2, 3])
        utry = circ.get_unitary()
        ScanPartitioner(3).run(circ, {})

        assert len(circ) == 3
        assert all(isinstance(op.gate, CircuitGate) for op in circ)
        placeholder_gate = TaggedGate(IdentityGate(1), '__fold_placeholder__')
        assert all(
            op.gate._circuit.count(placeholder_gate) == 0
            for op in circ)  # type: ignore  # noqa
        assert circ.get_unitary() == utry
        for cycle_index in range(circ.get_num_cycles()):
            assert not circ._is_cycle_idle(cycle_index)
Exemplo n.º 2
0
    def test_corner_case_2(self) -> None:
        circuit = Circuit(6)

        circuit.append_gate(ConstantUnitaryGate(UnitaryMatrix.random(1)), [0])
        circuit.append_gate(ConstantUnitaryGate(UnitaryMatrix.random(1)), [1])
        circuit.append_gate(ConstantUnitaryGate(UnitaryMatrix.random(1)), [5])

        circuit.append_gate(
            ConstantUnitaryGate(UnitaryMatrix.random(2), ),
            [
                3,
                0,
            ],
        )

        circuit.append_gate(
            ConstantUnitaryGate(UnitaryMatrix.random(2), ),
            [
                5,
                0,
            ],
        )
        circuit.append_gate(ConstantUnitaryGate(UnitaryMatrix.random(1)), [3])

        circuit.append_gate(
            ConstantUnitaryGate(UnitaryMatrix.random(4), ),
            [
                4,
                0,
                1,
                2,
            ],
        )
        circuit.append_gate(ConstantUnitaryGate(UnitaryMatrix.random(1)), [5])

        circuit.append_gate(
            ConstantUnitaryGate(UnitaryMatrix.random(3), ),
            [
                5,
                0,
                1,
            ],
        )

        circuit.append_gate(ConstantUnitaryGate(UnitaryMatrix.random(1)), [1])

        utry = circuit.get_unitary()
        ScanPartitioner(3).run(circuit, {})

        assert all(
            isinstance(op.gate, CircuitGate) or len(op.location) > 3
            for op in circuit)
        assert all(not isinstance(op.gate, TaggedGate)
                   or not op.gate.tag != '__fold_placeholder__'
                   for op in circuit)
        assert circuit.get_unitary() == utry
        for cycle_index in range(circuit.get_num_cycles()):
            assert not circuit._is_cycle_idle(cycle_index)
Exemplo n.º 3
0
    def test_run_r6(self, r6_qudit_circuit: Circuit) -> None:
        utry = r6_qudit_circuit.get_unitary()
        ClusteringPartitioner(3, 2).run(r6_qudit_circuit, {})

        assert any(isinstance(op.gate, CircuitGate) for op in r6_qudit_circuit)

        assert r6_qudit_circuit.get_unitary() == utry
        for cycle_index in range(r6_qudit_circuit.get_num_cycles()):
            assert not r6_qudit_circuit._is_cycle_idle(cycle_index)
Exemplo n.º 4
0
    def test_run_r6(self, r6_qudit_circuit: Circuit) -> None:
        utry = r6_qudit_circuit.get_unitary()
        ScanPartitioner(3).run(r6_qudit_circuit, {})

        assert all(
            isinstance(op.gate, CircuitGate) or len(op.location) > 3
            for op in r6_qudit_circuit)
        assert all(not isinstance(op.gate, TaggedGate)
                   or not op.gate.tag != '__fold_placeholder__'
                   for op in r6_qudit_circuit)
        assert r6_qudit_circuit.get_unitary() == utry
        for cycle_index in range(r6_qudit_circuit.get_num_cycles()):
            assert not r6_qudit_circuit._is_cycle_idle(cycle_index)
Exemplo n.º 5
0
def check_no_idle_cycles(circuit: Circuit) -> None:
    for cycle_index in range(circuit.get_num_cycles()):
        assert not circuit._is_cycle_idle(cycle_index)