Source code for qiskit_quantuminspire.hybrid.hybrid_job
from datetime import datetime
from functools import cache
from typing import Any, List, Union, cast
from compute_api_client import Result as RawJobResult
from qi2_shared.hybrid.quantum_interface import QuantumInterface
from qiskit import QuantumCircuit, transpile
from qiskit.providers.backend import BackendV2
from qiskit.providers.jobstatus import JobStatus
from qiskit.result.result import Result
from qiskit_quantuminspire import cqasm
from qiskit_quantuminspire.qi_jobs import QIBaseJob
[docs]
class QIHybridJob(QIBaseJob):
"""Used internally as a Qiskit job for hybrid algorithms that are fully executed on the Quantum Inspire platform.
Not to be used in user code.
"""
def __init__(
self,
run_input: Union[QuantumCircuit, List[QuantumCircuit]],
backend: Union[BackendV2, None],
quantum_interface: QuantumInterface,
**kwargs: Any,
) -> None:
self._quantum_interface = quantum_interface
super().__init__(run_input, backend, **kwargs)
[docs]
def status(self) -> JobStatus:
"""Quantum jobs in a hybrid environment are executed synchronously."""
return JobStatus.DONE
[docs]
def submit(self) -> None:
options = cast(dict[str, Any], self.backend().options)
for circuit_data in self.circuits_run_data:
transpiled_circuit = transpile(circuit_data.circuit, backend=self.backend())
circuit_str = cqasm.dumps(transpiled_circuit)
result = self._quantum_interface.execute_circuit(
circuit_str, options.get("shots"), raw_data_enabled=options.get("memory")
)
# Store retrieved results in format expected by Job
circuit_data.results = RawJobResult(
id=0,
created_on=datetime.now(),
job_id=0,
metadata_id=0,
execution_time_in_seconds=0,
shots_requested=result.shots_requested,
shots_done=result.shots_done,
results=result.results,
raw_data=result.raw_data,
)
[docs]
@cache
def result(self) -> Result:
return self._process_results()