# -*- coding: utf-8 -*-
""" run function for qlazy's qstate simulator """
from qlazy.QState import QState
from qlazy.QCirc import QCirc
from qlazy.CMem import CMem
from qlazy.Result import Result
from qlazy.lib.qstate_c import qstate_operate_qcirc
[docs]def run_cpu(qcirc=None, shots=1, cid=None, backend=None, out_state=False, init=None):
""" run the quantum circuit (with CPU) """
return __run_all(qcirc=qcirc, shots=shots, cid=cid, backend=backend, use_gpu=False,
out_state=out_state, init=init)
[docs]def run_gpu(qcirc=None, shots=1, cid=None, backend=None, out_state=False, init=None):
""" run the quantum circuit (with GPU) """
return __run_all(qcirc=qcirc, shots=shots, cid=cid, backend=backend, use_gpu=True,
out_state=out_state, init=init)
def __run_all(qcirc=None, shots=1, cid=None, backend=None, use_gpu=False, 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 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")
if init is None:
qstate = QState(qubit_num=qubit_num, use_gpu=use_gpu)
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.")
qstate = init.clone()
frequency = qstate_operate_qcirc(qstate, cmem, qcirc, shots, cid, out_state)
result = Result()
result.backend = backend
result.qubit_num = qubit_num
result.cmem_num = cmem_num
result.cid = cid
result.shots = shots
result.frequency = frequency
if out_state is True:
result.qstate = qstate
result.cmem = cmem
else:
result.qstate = None
result.cmem = None
result.info = None
return result