This notebook reproduces the results of Fig. 5b in the paper, using the circuit described in Fig. 10.
The notebook is divided in different sections:
This notebook was tested with qiskit 0.12.1 and Python 3.7.4
import numpy as np
import matplotlib.pyplot as plt
from datetime import datetime
import json
import copy
# Main qiskit imports
from qiskit import QuantumRegister, ClassicalRegister
from qiskit import QuantumCircuit, execute, Aer, IBMQ
# Tomography
from qiskit.ignis.verification.tomography import state_tomography_circuits
from qiskit.ignis.verification.tomography import StateTomographyFitter
# Calibration
from qiskit.ignis.mitigation.measurement import (complete_meas_cal,
CompleteMeasFitter,
MeasurementFilter)
from qiskit.assembler import disassemble
# Utility functions
from qiskit.tools.jupyter import *
from qiskit.tools.monitor import job_monitor
from qiskit.providers.jobstatus import JobStatus
from tqdm import tqdm_notebook as tqdm
# Shows a window in the upper left part with real-time information
# on the status of the jobs running on the IBM Q device
%qiskit_job_watcher
Accordion(children=(VBox(layout=Layout(max_width='610px', min_width='610px')),), layout=Layout(max_height='500…
# We use ibmqx2
IBMQ.load_account()
backend = IBMQ.get_provider().get_backend('ibmqx2')
# Local simulator and vector simulator
simulator = Aer.get_backend('qasm_simulator')
vector_backend = Aer.get_backend('statevector_simulator')
from pauli_channel import pauli_channel_tan, pauli_channel_tanh
SHOTS = 8192
q = QuantumRegister(5, name='q')
c = ClassicalRegister(2, name='c')
system = 2
ancilla = 4
pauli_ancillae = [0, 1]
t_values_exp = np.linspace(0, 5, 21)
# Prepare the two qubits 0 and 2 in a psi- state
prepare_two_qubit = QuantumCircuit(q)
prepare_two_qubit.x(q[ancilla])
prepare_two_qubit.x(q[system])
prepare_two_qubit.h(q[ancilla])
prepare_two_qubit.cx(q[ancilla], q[system])
prepare_two_qubit.barrier()
# Parameters
params_tan = {'eta': 0.1, 'omega': 2.0}
params_tanh = {'eta': 1.0, 'omega': .5}
circuits = {'tan': {}, 'tanh': {}}
for t in tqdm(t_values_exp):
circ_tan = prepare_two_qubit + pauli_channel_tan(q, t, system, pauli_ancillae, **params_tan)
circ_tanh = prepare_two_qubit + pauli_channel_tanh(q, t, system, pauli_ancillae, **params_tanh)
tomo_circuits_tan = state_tomography_circuits(circ_tan, [q[ancilla], q[system]])
tomo_circuits_tanh = state_tomography_circuits(circ_tanh, [q[ancilla], q[system]])
circuits['tan'][t] = tomo_circuits_tan
circuits['tanh'][t] = tomo_circuits_tanh
HBox(children=(IntProgress(value=0, max=21), HTML(value='')))
circuits['tan'][1.0][0].draw(output='mpl')
Drawing of one of the circuits, with the measurement on the (X, X)
basis.
This cell executes locally the (noiseless) simulation of the circuits above.
from extractable_work import extractable_work
theor_tanh = json.load(open("wex_tanh.dat"))
theor_tan = json.load(open("wex_tan.dat"))
for label, circs in tqdm(circuits.items(), leave=False):
wext = []
for t, tomo_circuits in tqdm(circs.items(), leave=False):
job = execute(tomo_circuits, backend=simulator, shots=SHOTS)
result = job.result()
tomo_fitter = StateTomographyFitter(result, tomo_circuits)
rho = tomo_fitter.fit()
wext.append(extractable_work(rho, 1, 0))
plt.plot(list(circs.keys()), wext, 'x', label=label)
plt.plot(theor_tan['t'], theor_tan['w_ex'], 'C0')
plt.plot(theor_tanh['t'], theor_tanh['w_ex'], 'C1')
plt.xlabel('t')
plt.ylabel('$W_{ex}(t)$')
plt.legend();
HBox(children=(IntProgress(value=0, max=2), HTML(value='')))
HBox(children=(IntProgress(value=0, max=21), HTML(value='')))
HBox(children=(IntProgress(value=0, max=21), HTML(value='')))
NOTE: At the moment, this division of circuits in jobs is not efficient, and 42 jobs are required. A normal IBM Q account only allows for 5 jobs to be queued at the same time, hence extra credits need to be requested to IBM.
The circuits can be rearranged in a smarter way (up to 75 per job) to minimize the number of jobs.
# Run the calibration job
cal_circuits, state_labels = complete_meas_cal([system, ancilla], q, c)
calibration_job = execute(cal_circuits, backend, shots=SHOTS)
experiments = {'tan': {
"backend": backend.name(),
"calibration": calibration_job.job_id(),
"description": "tan",
"jobs": [],
"metadata": params_tan
},
'tanh': {
"backend": backend.name(),
"calibration": calibration_job.job_id(),
"description": "tanh",
"jobs": [],
"metadata": params_tanh
}
}
for label, circs in tqdm(circuits.items(), leave=False):
wext = []
for t, tomo_circuits in tqdm(circs.items(), leave=False):
job = execute(tomo_circuits, backend=backend, shots=SHOTS)
experiments[label]['jobs'].append({'jobid': job.job_id(), 'description': "Two-qubit tomography circuits", 'metadata': {'t': t}})
experiment_data = list(experiments.values())
filename = 'pauli_channel_work_extraction_{}.json'.format(
datetime.now().strftime(("%Y_%m_%d-%H_%M")))
with open(filename,'w') as file:
json.dump(experiment_data, file)
HBox(children=(IntProgress(value=0, max=2), HTML(value='')))
HBox(children=(IntProgress(value=0, max=21), HTML(value='')))
HBox(children=(IntProgress(value=0, max=21), HTML(value='')))
All the information about the experiment is stored in a JSON file called pauli_channel_work_extraction_DATETIME.json
.
# List the available experiment files
import glob
print("Available experiment files:")
for f in glob.glob('*.json'):
print(f)
Available experiment files: pauli_channel_work_extraction_2019_10_11-16_36.json pauli_channel_work_extraction_2019_10_11-16_09.json
filename = "pauli_channel_work_extraction_2019_10_11-16_36.json"
with open(filename, 'r') as file:
experiment_data = json.load(file)
from extractable_work import extractable_work
theor_tanh = json.load(open("wex_tanh.dat"))
theor_tan = json.load(open("wex_tan.dat"))
for experiment in tqdm(experiment_data, leave=False):
backend = IBMQ.get_provider().get_backend(experiment['backend'])
# Use the calibration job to implement the error mitigation
calibration_job = backend.retrieve_job(experiment['calibration'])
if calibration_job.status() == JobStatus.DONE:
meas_fitter = CompleteMeasFitter(calibration_job.result(), state_labels)
meas_filter = meas_fitter.filter
label = experiment['description']
t = []
wext = []
for jobdata in tqdm(experiment['jobs'], leave=False):
job = backend.retrieve_job(jobdata['jobid'])
if job.status() == JobStatus.DONE:
result = job.result()
result = meas_filter.apply(result)
tomo_circuits = disassemble(job.qobj())[0]
tomo_fitter = StateTomographyFitter(result, tomo_circuits)
rho = tomo_fitter.fit()
t.append(jobdata['metadata']['t'])
wext.append(extractable_work(rho, 1, 0))
else:
break
plt.plot(t, wext, 'x', label=label)
plt.plot(theor_tan['t'], theor_tan['w_ex'], 'C0')
plt.plot(theor_tanh['t'], theor_tanh['w_ex'], 'C1')
plt.xlabel('t')
plt.ylabel('$W_{ex}(t)$')
plt.legend();
HBox(children=(IntProgress(value=0, max=2), HTML(value='')))
HBox(children=(IntProgress(value=0, max=21), HTML(value='')))
HBox(children=(IntProgress(value=0, max=21), HTML(value='')))
The job contains info on the gate and measurement error rates
job.properties().qubits
[[Nduv(date=datetime.datetime(2019, 10, 10, 8, 48, 19, tzinfo=tzutc()), name='T1', unit='µs', value=74.85208690842674), Nduv(date=datetime.datetime(2019, 10, 10, 8, 49, 59, tzinfo=tzutc()), name='T2', unit='µs', value=63.00239136127134), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='frequency', unit='GHz', value=5.286310100364124), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='readout_error', unit='', value=0.011500000000000066), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='prob_meas0_prep1', unit='', value=0.015000000000000013), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='prob_meas1_prep0', unit='', value=0.008)], [Nduv(date=datetime.datetime(2019, 10, 10, 8, 48, 19, tzinfo=tzutc()), name='T1', unit='µs', value=55.91509286343368), Nduv(date=datetime.datetime(2019, 10, 10, 8, 51, 50, tzinfo=tzutc()), name='T2', unit='µs', value=49.94183738916608), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='frequency', unit='GHz', value=5.237857365001662), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='readout_error', unit='', value=0.013000000000000012), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='prob_meas0_prep1', unit='', value=0.02300000000000002), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='prob_meas1_prep0', unit='', value=0.003)], [Nduv(date=datetime.datetime(2019, 10, 10, 8, 48, 19, tzinfo=tzutc()), name='T1', unit='µs', value=48.493587285146134), Nduv(date=datetime.datetime(2019, 10, 10, 8, 53, 39, tzinfo=tzutc()), name='T2', unit='µs', value=71.44467982265964), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='frequency', unit='GHz', value=5.0302584298484625), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='readout_error', unit='', value=0.02200000000000002), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='prob_meas0_prep1', unit='', value=0.028000000000000025), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='prob_meas1_prep0', unit='', value=0.016)], [Nduv(date=datetime.datetime(2019, 10, 9, 9, 6, 37, tzinfo=tzutc()), name='T1', unit='µs', value=50.94297901932959), Nduv(date=datetime.datetime(2019, 10, 10, 8, 49, 59, tzinfo=tzutc()), name='T2', unit='µs', value=33.012206841849164), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='frequency', unit='GHz', value=5.296035992380376), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='readout_error', unit='', value=0.013500000000000068), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='prob_meas0_prep1', unit='', value=0.019000000000000017), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='prob_meas1_prep0', unit='', value=0.008)], [Nduv(date=datetime.datetime(2019, 10, 10, 8, 48, 19, tzinfo=tzutc()), name='T1', unit='µs', value=53.841195989072794), Nduv(date=datetime.datetime(2019, 10, 10, 8, 51, 50, tzinfo=tzutc()), name='T2', unit='µs', value=56.08329929781503), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='frequency', unit='GHz', value=5.0847117156430865), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='readout_error', unit='', value=0.01849999999999996), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='prob_meas0_prep1', unit='', value=0.026000000000000023), Nduv(date=datetime.datetime(2019, 10, 10, 8, 46, 51, tzinfo=tzutc()), name='prob_meas1_prep0', unit='', value=0.011)]]
job.properties().gates
[Gate(gate='id', name='id_0', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 8, 55, 41, tzinfo=tzutc()), name='gate_error', unit='', value=0.000530003638190013), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=35.55555555555556)], qubits=[0]), Gate(gate='u1', name='u1_0', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 8, 55, 41, tzinfo=tzutc()), name='gate_error', unit='', value=0.0), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=0.0)], qubits=[0]), Gate(gate='u2', name='u2_0', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 8, 55, 41, tzinfo=tzutc()), name='gate_error', unit='', value=0.000530003638190013), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=35.55555555555556)], qubits=[0]), Gate(gate='u3', name='u3_0', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 8, 55, 41, tzinfo=tzutc()), name='gate_error', unit='', value=0.001060007276380026), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=71.11111111111111)], qubits=[0]), Gate(gate='id', name='id_1', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 8, 58, 11, tzinfo=tzutc()), name='gate_error', unit='', value=0.00048623317931454594), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=35.55555555555556)], qubits=[1]), Gate(gate='u1', name='u1_1', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 8, 58, 11, tzinfo=tzutc()), name='gate_error', unit='', value=0.0), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=0.0)], qubits=[1]), Gate(gate='u2', name='u2_1', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 8, 58, 11, tzinfo=tzutc()), name='gate_error', unit='', value=0.00048623317931454594), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=35.55555555555556)], qubits=[1]), Gate(gate='u3', name='u3_1', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 8, 58, 11, tzinfo=tzutc()), name='gate_error', unit='', value=0.0009724663586290919), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=71.11111111111111)], qubits=[1]), Gate(gate='id', name='id_2', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 0, 41, tzinfo=tzutc()), name='gate_error', unit='', value=0.00035051237273508225), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=35.55555555555556)], qubits=[2]), Gate(gate='u1', name='u1_2', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 0, 41, tzinfo=tzutc()), name='gate_error', unit='', value=0.0), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=0.0)], qubits=[2]), Gate(gate='u2', name='u2_2', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 0, 41, tzinfo=tzutc()), name='gate_error', unit='', value=0.00035051237273508225), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=35.55555555555556)], qubits=[2]), Gate(gate='u3', name='u3_2', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 0, 41, tzinfo=tzutc()), name='gate_error', unit='', value=0.0007010247454701645), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=71.11111111111111)], qubits=[2]), Gate(gate='id', name='id_3', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 3, 10, tzinfo=tzutc()), name='gate_error', unit='', value=0.0005103119016726023), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=35.55555555555556)], qubits=[3]), Gate(gate='u1', name='u1_3', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 3, 10, tzinfo=tzutc()), name='gate_error', unit='', value=0.0), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=0.0)], qubits=[3]), Gate(gate='u2', name='u2_3', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 3, 10, tzinfo=tzutc()), name='gate_error', unit='', value=0.0005103119016726023), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=35.55555555555556)], qubits=[3]), Gate(gate='u3', name='u3_3', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 3, 10, tzinfo=tzutc()), name='gate_error', unit='', value=0.0010206238033452046), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=71.11111111111111)], qubits=[3]), Gate(gate='id', name='id_4', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 5, 40, tzinfo=tzutc()), name='gate_error', unit='', value=0.00033568012760260896), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=35.55555555555556)], qubits=[4]), Gate(gate='u1', name='u1_4', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 5, 40, tzinfo=tzutc()), name='gate_error', unit='', value=0.0), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=0.0)], qubits=[4]), Gate(gate='u2', name='u2_4', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 5, 40, tzinfo=tzutc()), name='gate_error', unit='', value=0.00033568012760260896), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=35.55555555555556)], qubits=[4]), Gate(gate='u3', name='u3_4', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 5, 40, tzinfo=tzutc()), name='gate_error', unit='', value=0.0006713602552052179), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=71.11111111111111)], qubits=[4]), Gate(gate='cx', name='cx0_1', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 12, 44, tzinfo=tzutc()), name='gate_error', unit='', value=0.012965101499951642), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=362.66666666666663)], qubits=[0, 1]), Gate(gate='cx', name='cx0_2', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 20, 43, tzinfo=tzutc()), name='gate_error', unit='', value=0.01465408182914757), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=490.66666666666663)], qubits=[0, 2]), Gate(gate='cx', name='cx1_0', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 12, 44, tzinfo=tzutc()), name='gate_error', unit='', value=0.012965101499951642), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=362.66666666666663)], qubits=[1, 0]), Gate(gate='cx', name='cx1_2', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 28, 41, tzinfo=tzutc()), name='gate_error', unit='', value=0.014727243870379603), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=512.0)], qubits=[1, 2]), Gate(gate='cx', name='cx2_0', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 20, 43, tzinfo=tzutc()), name='gate_error', unit='', value=0.01465408182914757), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=490.66666666666663)], qubits=[2, 0]), Gate(gate='cx', name='cx2_1', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 28, 41, tzinfo=tzutc()), name='gate_error', unit='', value=0.014727243870379603), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=512.0)], qubits=[2, 1]), Gate(gate='cx', name='cx2_3', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 34, 39, tzinfo=tzutc()), name='gate_error', unit='', value=0.0197680029048376), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=391.1111111111111)], qubits=[2, 3]), Gate(gate='cx', name='cx2_4', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_error', unit='', value=0.009781530975068647), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=312.88888888888886)], qubits=[2, 4]), Gate(gate='cx', name='cx3_2', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 34, 39, tzinfo=tzutc()), name='gate_error', unit='', value=0.0197680029048376), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=391.1111111111111)], qubits=[3, 2]), Gate(gate='cx', name='cx3_4', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 42, 38, tzinfo=tzutc()), name='gate_error', unit='', value=0.017627607098522707), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=405.3333333333333)], qubits=[3, 4]), Gate(gate='cx', name='cx4_2', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_error', unit='', value=0.009781530975068647), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=312.88888888888886)], qubits=[4, 2]), Gate(gate='cx', name='cx4_3', parameters=[Nduv(date=datetime.datetime(2019, 10, 10, 9, 42, 38, tzinfo=tzutc()), name='gate_error', unit='', value=0.017627607098522707), Nduv(date=datetime.datetime(2019, 10, 10, 9, 50, 37, tzinfo=tzutc()), name='gate_length', unit='ns', value=405.3333333333333)], qubits=[4, 3])]