Trying to run this example (Submit a circuit with Qiskit to Azure Quantum) on Riggeti from Azure, with a US account, but job failed with this error on the Job management console of Azure:
Error code: QIRPreProcessingFailed
Error message: No match found for output recording set converter from outputrecordingset.v2.labeled to outputrecordingset.v1.nonlabeled
And this error in my python console when running job_monitor():
Job Status: job incurred error
(It is working when I try IONQ or Quantinuum)
Any suggestions?
BTW - one of the main differences between running Ionq/Quantinuum to running on Rigetti is the _translate_input function.
In the first two, the method is overided in the context of backend, to support non QIR circuit.
In Rigetti they use the default _translate_input of AzureBackend.
Rigetti, under AzureBackend general object:
def _translate_input(self, circuit, data_format, input_params, to_qir_kwargs={}):
""" Translates the input values to the format expected by the AzureBackend. """
if data_format != "qir.v1":
target = self.name()
raise ValueError(f"{data_format} is not a supported data format for target {target}.")
logger.info(f"Using QIR as the job's payload format.")
from qiskit_qir import to_qir_bitcode, to_qir
# Set of gates supported by QIR targets.
from qiskit_qir import SUPPORTED_INSTRUCTIONS as qir_supported_instructions
capability = input_params["targetCapability"] if "targetCapability" in input_params else "AdaptiveExecution"
if logger.isEnabledFor(logging.DEBUG):
logger.debug(f"QIR:\n{to_qir(circuit, capability, **to_qir_kwargs)}")
# all qir payload needs to define an entryPoint and arguments:
if not "entryPoint" in input_params:
input_params["entryPoint"] = "main"
if not "arguments" in input_params:
input_params["arguments"] = []
# We'll transpile automatically to the supported gates in QIR unless explicitly skipped.
if not input_params.get("skipTranspile", False):
circuit = transpile(circuit, basis_gates = qir_supported_instructions)
# We'll only log the QIR again if we performed a transpilation.
if logger.isEnabledFor(logging.DEBUG):
logger.debug(f"QIR (Post-transpilation):\n{to_qir(circuit, capability, **to_qir_kwargs)}")
qir = bytes(to_qir_bitcode(circuit, capability, **to_qir_kwargs))
return (qir, data_format, input_params)
In Qunatinuum, under QuantinuumBackend:
def _translate_input(self, circuit, data_format, input_params, to_qir_kwargs={}):
""" Translates the input values to the format expected by the AzureBackend. """
if input_params["targetCapability"] == "openqasm":
return (circuit.qasm(), data_format, input_params)
else:
# Not using openqasm, assume qir then:
return super()._translate_input(circuit, "qir.v1", input_params, to_qir_kwargs)
In Ionq, under IonQBackendBackend:
def _translate_input(self, circuit, data_format, input_params, to_qir_kwargs={}):
""" Translates the input values to the format expected by the AzureBackend. """
if data_format == "ionq.circuit.v1":
ionq_circ, _, _ = qiskit_circ_to_ionq_circ(circuit, gateset=self.gateset())
input_data = {
"gateset": self.gateset(),
"qubits": circuit.num_qubits,
"circuit": ionq_circ,
}
return (IonQ._encode_input_data(input_data), data_format, input_params)
else:
return super()._translate_input(circuit, data_format, input_params, to_qir_kwargs)
One more difference is content_type of run() function. Looks like in Rigetti they mistakenly took the same str as input_data_format:

