JIQCER QPU¶
JIQCER-5 is the 5 qubit IQM Spark device hosted in the JUNIQ facility.
Getting Access¶
Access to the JIQCER-5 QPU is available via the Qaptiva device which accepts jobs written using myqlm framework. If you haven't set up the access to Qaptiva yet, please follow the instructions in the Qaptiva access documentation to get started. Use the project name relevant to JIQCER-5 when signing up on the JuDoor portal.
Submitting first job¶
Submitting the job to JIQCER-5 is similar to the test job on the Qaptiva device. The only difference is that you need to import the Jiqcer5QPU class instead of the LinAlg QPU.
from qlmaas.qpus import Jiqcer5QPU # Note that we are importing JIQCER-5 QPU from qlmaas
from qat.lang import qrout, H, CNOT
import networkx as nx
from IPython.display import display
import pprint
def pprint_dict(dictionary: dict):
"""Pretty print a dictionary, truncating string values longer than 120 characters for better readability."""
pprint.pprint({k: v[:120] + '…' if isinstance(v, str) and len(v) > 120 else v
for k, v in dictionary.items()})
# Define the circuit
@qrout
def bell_pair():
H(0)
CNOT(0, 1)
bell_pair.display()
# Convert the circuit into a myqlm Job
job = bell_pair.to_job(nbshots=512)
# Instantiate the qpu
qpu = Jiqcer5QPU()
# Submit the job to the QPU
result = qpu.submit(job)
# Visualise the result
for sample in result:
print("State %s probability %s" % (sample.state, sample.probability))
Submitted a new batch: SJob205071 State |11> probability 0.400390625 State |00> probability 0.52734375 State |10> probability 0.046875 State |01> probability 0.025390625
display(result.display())
Result(raw_data=[Sample(_state=b'\x03', probability=0.400390625, _amplitude=None, intermediate_measurements=None, err=0.02167532945246767, qregs=[DefaultRegister(length=2, start=0, msb=None, _subtype_metadata=None, key=None)]), Sample(_state=b'\x00', probability=0.52734375, _amplitude=None, intermediate_measurements=None, err=0.02208559754801113, qregs=[DefaultRegister(length=2, start=0, msb=None, _subtype_metadata=None, key=None)]), Sample(_state=b'\x02', probability=0.046875, _amplitude=None, intermediate_measurements=None, err=0.00935050616324091, qregs=[DefaultRegister(length=2, start=0, msb=None, _subtype_metadata=None, key=None)]), Sample(_state=b'\x01', probability=0.025390625, _amplitude=None, intermediate_measurements=None, err=0.006958915097827096, qregs=[DefaultRegister(length=2, start=0, msb=None, _subtype_metadata=None, key=None)])], _value=None, error=None, value_data=None, error_data=None, meta_data={'backend_name': "'IQMBackend'", 'backend_version': "''", 'date': "'2026-04-15'", 'header': 'None', 'qobj_id': "''", 'job_id': "'019d9181-8b12-7f33-9e29-628a43b041d4'", 'status': 'None', 'success': 'True', 'circuits': "[{'name': 'circuit-35615', 'instructions': ({'name': 'prx', 'locus': ('QB1',), 'args': {'angle': 1.5707963267948966, 'phase': 1.5707963267948966}, 'implementation': None}, {'name': 'prx', 'locus': ('QB1',), 'args': {'angle': 3.141592653589793, 'phase': 0.0}, 'implementation': None}, {'name': 'prx', 'locus': ('QB2',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'cz', 'locus': ('QB2', 'QB3'), 'args': {}, 'implementation': None}, {'name': 'prx', 'locus': ('QB2',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'cz', 'locus': ('QB2', 'QB3'), 'args': {}, 'implementation': None}, {'name': 'prx', 'locus': ('QB2',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'cz', 'locus': ('QB2', 'QB3'), 'args': {}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 1.5707963267948966, 'phase': 1.5707963267948966}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 3.141592653589793, 'phase': 0.0}, 'implementation': None}, {'name': 'cz', 'locus': ('QB1', 'QB3'), 'args': {}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 1.5707963267948966, 'phase': 1.5707963267948966}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 3.141592653589793, 'phase': 0.0}, 'implementation': None}, {'name': 'measure', 'locus': ('QB1',), 'args': {'key': 'c2744_2_0_0'}, 'implementation': None}, {'name': 'measure', 'locus': ('QB3',), 'args': {'key': 'c2744_2_0_1'}, 'implementation': None}), 'metadata': {}}]", 'parameters': "CircuitJobParameters(max_circuit_duration_over_t2=None, heralding_mode=<HeraldingMode.NONE: 'none'>, move_gate_validation=<MoveGateValidationMode.STRICT: 'strict'>, move_gate_frame_tracking=<MoveGateFrameTrackingMode.FULL: 'full'>, active_reset_cycles=None, dd_mode=<DDMode.DISABLED: 'disabled'>, dd_strategy=None, shots=512, calibration_set_id=UUID('de447e16-1c17-4d06-aa7c-f5546cf0bbb0'), qubit_mapping=None)", 'timeline': "[TimelineEntry(source='iqm-server', status='created', timestamp=datetime.datetime(2026, 4, 15, 14, 17, 59, 323255, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='received', timestamp=datetime.datetime(2026, 4, 15, 14, 17, 59, 366635, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='validation_started', timestamp=datetime.datetime(2026, 4, 15, 14, 17, 59, 375765, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='fetch_calibration_started', timestamp=datetime.datetime(2026, 4, 15, 14, 17, 59, 381171, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='fetch_calibration_ended', timestamp=datetime.datetime(2026, 4, 15, 14, 17, 59, 502880, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='compilation_started', timestamp=datetime.datetime(2026, 4, 15, 14, 17, 59, 509531, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='compilation_ended', timestamp=datetime.datetime(2026, 4, 15, 14, 17, 59, 807911, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='save_sweep_metadata_ended', timestamp=datetime.datetime(2026, 4, 15, 14, 18, 0, 604067, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='pending_execution', timestamp=datetime.datetime(2026, 4, 15, 14, 18, 0, 611877, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='execution_started', timestamp=datetime.datetime(2026, 4, 15, 14, 18, 0, 621317, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='execution_ended', timestamp=datetime.datetime(2026, 4, 15, 14, 18, 2, 62858, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='post_processing_pending', timestamp=datetime.datetime(2026, 4, 15, 14, 18, 2, 175509, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='post_processing_started', timestamp=datetime.datetime(2026, 4, 15, 14, 18, 2, 177569, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='ready', timestamp=datetime.datetime(2026, 4, 15, 14, 18, 2, 270559, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-server', status='completed', timestamp=datetime.datetime(2026, 4, 15, 14, 18, 2, 703735, tzinfo=TzInfo(0)))]", 'timestamps': "{'job_start': '2026-04-15T14:17:59+00:00', 'compile_start': '2026-04-15T14:17:59+00:00', 'compile_end': '2026-04-15T14:17:59+00:00', 'submit_end': '2026-04-15T14:18:00+00:00', 'execution_start': '2026-04-15T14:18:00+00:00', 'execution_end': '2026-04-15T14:18:02+00:00', 'job_end': '2026-04-15T14:18:02+00:00'}", 'nbshots': "'512'", 'circuit_depth': "'12'", 'qubits': '"[Qubit(QuantumRegister(2, \'q13271\'), 0), Qubit(QuantumRegister(2, \'q13271\'), 1), Qubit(QuantumRegister(3, \'ancilla\'), 0), Qubit(QuantumRegister(3, \'ancilla\'), 1), Qubit(QuantumRegister(3, \'ancilla\'), 2)]"', 'single_job': 'True'}, in_memory=None, data=None, qregs=[DefaultRegister(length=2, start=0, msb=None, _subtype_metadata=None, key=None)], _parameter_map=None, _values=None, values_data=None, need_flip=False, nbqbits=None, lsb_first=False, has_statevector=False, statevector=None)pprint_dict(result.meta_data)
{'backend_name': "'IQMBackend'",
'backend_version': "''",
'circuit_depth': "'12'",
'circuits': "[{'name': 'circuit-35615', 'instructions': ({'name': 'prx', "
"'locus': ('QB1',), 'args': {'angle': 1.5707963267948966, 'ph…",
'date': "'2026-04-15'",
'header': 'None',
'job_id': "'019d9181-8b12-7f33-9e29-628a43b041d4'",
'nbshots': "'512'",
'parameters': 'CircuitJobParameters(max_circuit_duration_over_t2=None, '
"heralding_mode=<HeraldingMode.NONE: 'none'>, "
'move_gate_validatio…',
'qobj_id': "''",
'qubits': '"[Qubit(QuantumRegister(2, \'q13271\'), 0), '
"Qubit(QuantumRegister(2, 'q13271'), 1), Qubit(QuantumRegister(3, "
"'ancilla'), 0…",
'single_job': 'True',
'status': 'None',
'success': 'True',
'timeline': "[TimelineEntry(source='iqm-server', status='created', "
'timestamp=datetime.datetime(2026, 4, 15, 14, 17, 59, 323255, '
'tzinf…',
'timestamps': "{'job_start': '2026-04-15T14:17:59+00:00', 'compile_start': "
"'2026-04-15T14:17:59+00:00', 'compile_end': '2026-04-15T14:1…"}
Getting each samples for a circuit¶
In case you want to have the measured sample for each shot, set aggregate_data to False in the job options.
job_with_samples = bell_pair.to_job(nbshots=10, aggregate_data=False)
result_with_samples = qpu.submit(job_with_samples)
Submitted a new batch: SJob205072
from collections import Counter
history = [s.state for s in result_with_samples]
print(Counter(history))
print(f"Shot order: {history}")
Counter({|00>: 7, |11>: 3})
Shot order: [|00>, |11>, |11>, |00>, |00>, |00>, |11>, |00>, |00>, |00>]
Note that each result has a list of samples. In the case of aggregated results, the samples are probability distributions over the measurement outcomes. In the case of non-aggregated results, the samples are the raw measurement outcomes from each shot. When the results are aggregated, you can access the sampling error for each sample via the err attribute of the Sample object. See the myqlm documentation on Sample.
Visualising the QPU tolopogy¶
graph = qpu.get_specs().as_graph()
nx.draw(graph, with_labels=True)
Controlling the QPU parameters¶
The Jiqcer5QPU class allows you to control some of the QPU parameters. They are to be passed as meta data in the job options when submitting the job.
Please note that all metadata needs to be passed as string key-value pairs in the job options. You can convert the value to string using str() function if needed.
At the moment the following parameters are supported:
transpiler_optimization_level : str(int)
The optimization level for transpiling circuits (0-3, 1 is default).
Same as in Qiskit transpile function. See https://quantum.cloud.ibm.com/docs/en/api/qiskit/transpiler
return_exec_qasm : str(bool)
Whether to include the executed QASM in the result metadata. (Default: False)
If set to True, the QASM representation of the circuit will be included in the result metadata under the "qasm" key.
Please judge the impact on performance (via result.meta_data["circuit_depth"] on a job without this option) when enabling this option.
Circuit depth greater than 100 may lead to large QASM strings and performance degradation.
Use this for debugging purposes and avoid using it for large circuits or in production code.
See for eg the following execution
job.meta_data = (job.meta_data or {}) | {"transpiler_optimization_level": str(0), "return_exec_qasm": str(True)}
result = qpu.submit(job)
Submitted a new batch: SJob205073
display(result.display())
Result(raw_data=[Sample(_state=b'\x00', probability=0.513671875, _amplitude=None, intermediate_measurements=None, err=0.022110427352680657, qregs=[DefaultRegister(length=2, start=0, msb=None, _subtype_metadata=None, key=None)]), Sample(_state=b'\x03', probability=0.404296875, _amplitude=None, intermediate_measurements=None, err=0.02170974295266779, qregs=[DefaultRegister(length=2, start=0, msb=None, _subtype_metadata=None, key=None)]), Sample(_state=b'\x02', probability=0.044921875, _amplitude=None, intermediate_measurements=None, err=0.009163005273855156, qregs=[DefaultRegister(length=2, start=0, msb=None, _subtype_metadata=None, key=None)]), Sample(_state=b'\x01', probability=0.037109375, _amplitude=None, intermediate_measurements=None, err=0.008362186495676377, qregs=[DefaultRegister(length=2, start=0, msb=None, _subtype_metadata=None, key=None)])], _value=None, error=None, value_data=None, error_data=None, meta_data={'backend_name': "'IQMBackend'", 'backend_version': "''", 'date': "'2026-04-15'", 'header': 'None', 'qobj_id': "''", 'job_id': "'019d9182-ba9a-7d82-ada3-2f21994903de'", 'status': 'None', 'success': 'True', 'circuits': "[{'name': 'circuit-35659', 'instructions': ({'name': 'prx', 'locus': ('QB1',), 'args': {'angle': 1.5707963267948966, 'phase': 1.5707963267948966}, 'implementation': None}, {'name': 'prx', 'locus': ('QB1',), 'args': {'angle': 3.141592653589793, 'phase': 0.0}, 'implementation': None}, {'name': 'prx', 'locus': ('QB2',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'cz', 'locus': ('QB2', 'QB3'), 'args': {}, 'implementation': None}, {'name': 'prx', 'locus': ('QB2',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'cz', 'locus': ('QB2', 'QB3'), 'args': {}, 'implementation': None}, {'name': 'prx', 'locus': ('QB2',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 1.5707963267948966, 'phase': 0.0}, 'implementation': None}, {'name': 'cz', 'locus': ('QB2', 'QB3'), 'args': {}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 1.5707963267948966, 'phase': 1.5707963267948966}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 3.141592653589793, 'phase': 0.0}, 'implementation': None}, {'name': 'cz', 'locus': ('QB1', 'QB3'), 'args': {}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 1.5707963267948966, 'phase': 1.5707963267948966}, 'implementation': None}, {'name': 'prx', 'locus': ('QB3',), 'args': {'angle': 3.141592653589793, 'phase': 0.0}, 'implementation': None}, {'name': 'measure', 'locus': ('QB1',), 'args': {'key': 'c2748_2_0_0'}, 'implementation': None}, {'name': 'measure', 'locus': ('QB3',), 'args': {'key': 'c2748_2_0_1'}, 'implementation': None}), 'metadata': {}}]", 'parameters': "CircuitJobParameters(max_circuit_duration_over_t2=None, heralding_mode=<HeraldingMode.NONE: 'none'>, move_gate_validation=<MoveGateValidationMode.STRICT: 'strict'>, move_gate_frame_tracking=<MoveGateFrameTrackingMode.FULL: 'full'>, active_reset_cycles=None, dd_mode=<DDMode.DISABLED: 'disabled'>, dd_strategy=None, shots=512, calibration_set_id=UUID('de447e16-1c17-4d06-aa7c-f5546cf0bbb0'), qubit_mapping=None)", 'timeline': "[TimelineEntry(source='iqm-server', status='created', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 17, 27398, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='received', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 17, 56003, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='validation_started', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 17, 62270, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='fetch_calibration_started', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 17, 66018, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='fetch_calibration_ended', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 17, 190504, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='compilation_started', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 17, 199273, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='compilation_ended', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 17, 477774, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='save_sweep_metadata_ended', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 18, 275950, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='pending_execution', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 18, 283839, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='execution_started', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 18, 293463, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='execution_ended', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 19, 745944, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='post_processing_pending', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 19, 862912, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='post_processing_started', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 19, 866642, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-station-control', status='ready', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 19, 933362, tzinfo=TzInfo(0))), TimelineEntry(source='iqm-server', status='completed', timestamp=datetime.datetime(2026, 4, 15, 14, 19, 20, 366473, tzinfo=TzInfo(0)))]", 'timestamps': "{'job_start': '2026-04-15T14:19:17+00:00', 'compile_start': '2026-04-15T14:19:17+00:00', 'compile_end': '2026-04-15T14:19:17+00:00', 'submit_end': '2026-04-15T14:19:18+00:00', 'execution_start': '2026-04-15T14:19:18+00:00', 'execution_end': '2026-04-15T14:19:19+00:00', 'job_end': '2026-04-15T14:19:20+00:00'}", 'nbshots': "'512'", 'circuit_depth': "'12'", 'qubits': '"[Qubit(QuantumRegister(2, \'q13289\'), 0), Qubit(QuantumRegister(2, \'q13289\'), 1), Qubit(QuantumRegister(3, \'ancilla\'), 0), Qubit(QuantumRegister(3, \'ancilla\'), 1), Qubit(QuantumRegister(3, \'ancilla\'), 2)]"', 'qasm': '\'OPENQASM 3.0;\\ninclude "stdgates.inc";\\ngate r(p0, p1) _gate_q_0 {\\n u3(p0, p1 - pi/2, pi/2 - p1) _gate_q_0;\\n}\\nbit[2] c2748;\\nqubit[3] ancilla;\\nqubit[2] q13289;\\nr(pi/2, pi/2) q13289[0];\\nr(pi, 0) q13289[0];\\nr(pi/2, 0) q13289[1];\\nr(pi/2, 0) ancilla[0];\\ncz q13289[1], ancilla[0];\\nr(pi/2, 0) q13289[1];\\nr(pi/2, 0) ancilla[0];\\ncz q13289[1], ancilla[0];\\nr(pi/2, 0) q13289[1];\\nr(pi/2, 0) ancilla[0];\\ncz q13289[1], ancilla[0];\\nr(pi/2, pi/2) ancilla[0];\\nr(pi, 0) ancilla[0];\\ncz q13289[0], ancilla[0];\\nr(pi/2, pi/2) ancilla[0];\\nr(pi, 0) ancilla[0];\\nc2748[0] = measure q13289[0];\\nc2748[1] = measure ancilla[0];\\n\'', 'single_job': 'True'}, in_memory=None, data=None, qregs=[DefaultRegister(length=2, start=0, msb=None, _subtype_metadata=None, key=None)], _parameter_map=None, _values=None, values_data=None, need_flip=False, nbqbits=None, lsb_first=False, has_statevector=False, statevector=None)pprint_dict(result.meta_data)
{'backend_name': "'IQMBackend'",
'backend_version': "''",
'circuit_depth': "'12'",
'circuits': "[{'name': 'circuit-35659', 'instructions': ({'name': 'prx', "
"'locus': ('QB1',), 'args': {'angle': 1.5707963267948966, 'ph…",
'date': "'2026-04-15'",
'header': 'None',
'job_id': "'019d9182-ba9a-7d82-ada3-2f21994903de'",
'nbshots': "'512'",
'parameters': 'CircuitJobParameters(max_circuit_duration_over_t2=None, '
"heralding_mode=<HeraldingMode.NONE: 'none'>, "
'move_gate_validatio…',
'qasm': '\'OPENQASM 3.0;\\ninclude "stdgates.inc";\\ngate r(p0, p1) _gate_q_0 '
'{\\n u3(p0, p1 - pi/2, pi/2 - p1) _gate_q_0;\\n}\\nbit[2…',
'qobj_id': "''",
'qubits': '"[Qubit(QuantumRegister(2, \'q13289\'), 0), '
"Qubit(QuantumRegister(2, 'q13289'), 1), Qubit(QuantumRegister(3, "
"'ancilla'), 0…",
'single_job': 'True',
'status': 'None',
'success': 'True',
'timeline': "[TimelineEntry(source='iqm-server', status='created', "
'timestamp=datetime.datetime(2026, 4, 15, 14, 19, 17, 27398, '
'tzinfo…',
'timestamps': "{'job_start': '2026-04-15T14:19:17+00:00', 'compile_start': "
"'2026-04-15T14:19:17+00:00', 'compile_end': '2026-04-15T14:1…"}
['r', 'id', 'cz', 'measure', 'delay', 'if_else', 'reset'] as defined by Qiskit.
However not all of these gates are supported in myqlm which makes it difficult to define circuits that do not change under transpilation at the QPU level.
The qasm and transpiler_optimization_level=0 options help to debug this issue by giving you the final QASM that is executed for each circuit and also giving some control over the transpilation process.
However, there is still a lack of control over the gateset which can lead to unexpected results in some cases.
Further reading¶
More details on writing and submitting circuits can be seen via mainly two resources:
Here are some useful topics: