Exemplo n.º 1
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.º 2
0
    def test_valid_2(self) -> None:
        u1 = UnitaryMatrix.random(3)
        u2 = UnitaryMatrix.random(2)
        ub = UnitaryBuilder(3)

        ub.apply_right(u1, [0, 1, 2])
        assert ub.get_unitary() == u1
        ub.apply_right(u2, [0, 1])
        prod = np.kron(u2.get_numpy(), np.identity(2)) @ u1.get_numpy()
        assert ub.get_unitary() == prod
Exemplo n.º 3
0
    def test_valid_3(self) -> None:
        u1 = UnitaryMatrix.random(3)
        u2 = UnitaryMatrix.random(2)
        ub = UnitaryBuilder(3)

        ub.apply_left(u1, [0, 1, 2])
        assert ub.get_unitary() == u1
        ub.apply_left(u2, [1, 2])
        prod = u1 @ np.kron(np.identity(2), u2.get_numpy())
        assert ub.get_unitary() == prod
Exemplo n.º 4
0
"""This script is contains a simple use case of the QFAST synthesis method."""
from __future__ import annotations

import logging

from bqskit.compiler import CompilationTask
from bqskit.compiler import Compiler
from bqskit.compiler.passes.synthesis.qpredict import QPredictDecompositionPass
from bqskit.ir import Circuit
from bqskit.qis.unitary.unitarymatrix import UnitaryMatrix

# Enable logging
logging.getLogger('bqskit').setLevel(logging.DEBUG)

# Let's create a random 3-qubit unitary to synthesize and add it to a circuit.
circuit = Circuit.from_unitary(UnitaryMatrix.random(3))

# We will now define the CompilationTask we want to run.
task = CompilationTask(circuit, [QPredictDecompositionPass()])

# Finally let's create create the compiler and execute the CompilationTask.
compiler = Compiler()
compiled_circuit = compiler.compile(task)
for op in compiled_circuit:
    print(op)

# Close our connection to the compiler backend
del compiler
Exemplo n.º 5
0
    def test_valid_1(self) -> None:
        u1 = UnitaryMatrix.random(3)
        ub = UnitaryBuilder(3)

        ub.apply_right(u1, [0, 1, 2])
        assert ub.get_unitary() == u1
Exemplo n.º 6
0
    def test_valid_1(self) -> None:
        u1 = UnitaryMatrix.random(3)
        ub = UnitaryBuilder(3)

        ub.apply_right(u1, [0, 1, 2])
        assert u1 == ub.calc_env_matrix([0, 1, 2])