Source code for qlazy.backend.qlazy_stabilizer_simulator

# -*- coding: utf-8 -*-
""" run function for qlazy's stabilizer simulator """

from qlazy.Stabilizer import Stabilizer
from qlazy.CMem import CMem
from qlazy.Result import Result
from qlazy.lib.stabilizer_c import stabilizer_operate_qcirc
from qlazy.util import is_clifford_gate

[docs]def run(qcirc=None, shots=1, cid=None, backend=None, out_state=False, init=None): """ run the quantum circuit """ if qcirc is None: raise ValueError("quantum circuit must be specified.") qubit_num = qcirc.qubit_num cmem_num = qcirc.cmem_num if init is None: stab = Stabilizer(qubit_num) stab.set_all('Z') else: if init.qubit_num < qcirc.qubit_num: raise ValueError("qubit number of the quantum state must be equal or larger than the quantum circuit size.") stab = init.clone() if cmem_num > 0: cmem = CMem(cmem_num) else: cmem = None if cid is None: cid = list(range(cmem_num)) if cmem_num < len(cid): raise ValueError("length of cid must be less than classical resister size of qcirc") qcirc_unitary, qcirc_non_unitary = qcirc.split_unitary_non_unitary() frequency = stabilizer_operate_qcirc(stab, cmem, qcirc_unitary, 1, cid) frequency = stabilizer_operate_qcirc(stab, cmem, qcirc_non_unitary, shots, cid) result = Result() result.qubit_num = qubit_num result.cmem_num = cmem_num result.cid = cid result.shots = shots result.frequency = frequency result.backend = backend if out_state is True: result.stabilizer = stab result.cmem = cmem else: result.stabilizer = None result.cmem = None result.info = None return result