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