4. New Feature Demonstration (Arbitrary Control Pulses, Coupled Qubit Operations)¶
Due to variations in parameters across different quantum computers, the parameter range used in this demo may not yield the same scan results on different machines.
1D Demo¶
In [2]:
Copied!
# q-q swap, Q50, Q45
import numpy as np
qubit0 = 'Q50'
qubit1 = 'Q45'
coupler = 'G82'
qBiasStartAmp = 700
qBiasEndAmp = 1000
qBiasStep = 5
qBiasAmp = np.arange(qBiasStartAmp, qBiasEndAmp, qBiasStep)
template1 = '''
X {qubit0}
I {qubit0} 10
B {qubit0} {coupler}
PLS {qubit0} 1 -1 {pulseLength} {qBiasAmplitude} 0 0 0 4
G {coupler} {pulseLength} {g}
I {qubit0} {pulseLength}
I {qubit0} 10
B {qubit0} {qubit1}
M {qubit1}
'''
pulseLength = 1000;
g = -10e6;
template = template1
qCircuits = []
for qBias in qBiasAmp:
c = template.format(qubit0 = qubit0, qubit1 = qubit1, coupler = coupler, pulseLength = pulseLength, qBiasAmplitude = qBias, g = g)
qCircuits.append(c)
print(len(qCircuits))
print(qCircuits[0])
# q-q swap, Q50, Q45
import numpy as np
qubit0 = 'Q50'
qubit1 = 'Q45'
coupler = 'G82'
qBiasStartAmp = 700
qBiasEndAmp = 1000
qBiasStep = 5
qBiasAmp = np.arange(qBiasStartAmp, qBiasEndAmp, qBiasStep)
template1 = '''
X {qubit0}
I {qubit0} 10
B {qubit0} {coupler}
PLS {qubit0} 1 -1 {pulseLength} {qBiasAmplitude} 0 0 0 4
G {coupler} {pulseLength} {g}
I {qubit0} {pulseLength}
I {qubit0} 10
B {qubit0} {qubit1}
M {qubit1}
'''
pulseLength = 1000;
g = -10e6;
template = template1
qCircuits = []
for qBias in qBiasAmp:
c = template.format(qubit0 = qubit0, qubit1 = qubit1, coupler = coupler, pulseLength = pulseLength, qBiasAmplitude = qBias, g = g)
qCircuits.append(c)
print(len(qCircuits))
print(qCircuits[0])
60 X Q50 I Q50 10 B Q50 G82 PLS Q50 1 -1 1000 700 0 0 0 4 G G82 1000 -10000000.0 I Q50 1000 I Q50 10 B Q50 Q45 M Q45
In [ ]:
Copied!
from ezQgd import *
import math
import time
account = Account(login_key='opecT+SO+QFjLXREUU2f8paSJNtTytPPV8Dbbd2T8Zg=', machine_name='gd_qc1')
# Download the experiment parameters used before submitting
config_json = account.download_config(down_file=False)
exp_name = "qq_swap_{qubit0}_{qubit1}_".format(qubit0 = qubit0, qubit1 = qubit1)+str(int(time.time()))
query_id = account.submit_job(circuit=qCircuits, version=exp_name, num_shots=2000, is_verify=False)
# Query experiment results in batches, and for bulk queries, only the raw data is returned. The backend supports a maximum of 50 experiment IDs for bulk querying.
p1 = []
if query_id:
for idx in range(0, len(query_id), 10):
print(query_id[idx:idx+10])
result=account.query_experiment(query_id[idx:idx+10], max_wait_time=60*1000)
for query_res in result:
# Experiment result transformation, probability conversion, and readout correction
# results = account.readout_data_to_state_probabilities_whole(query_res)
prob = account.probability_calibration(query_res, config_json)
prob = account.probability_correction(prob)
p1.append(prob['1'])
import matplotlib.pyplot as plt
plt.plot(qBiasAmp, p1)
plt.xlabel('qubit0 bias(a.u.)')
plt.ylabel('qubit1 |1> probability')
plt.title('q-q swap')
plt.show()
from ezQgd import *
import math
import time
account = Account(login_key='opecT+SO+QFjLXREUU2f8paSJNtTytPPV8Dbbd2T8Zg=', machine_name='gd_qc1')
# Download the experiment parameters used before submitting
config_json = account.download_config(down_file=False)
exp_name = "qq_swap_{qubit0}_{qubit1}_".format(qubit0 = qubit0, qubit1 = qubit1)+str(int(time.time()))
query_id = account.submit_job(circuit=qCircuits, version=exp_name, num_shots=2000, is_verify=False)
# Query experiment results in batches, and for bulk queries, only the raw data is returned. The backend supports a maximum of 50 experiment IDs for bulk querying.
p1 = []
if query_id:
for idx in range(0, len(query_id), 10):
print(query_id[idx:idx+10])
result=account.query_experiment(query_id[idx:idx+10], max_wait_time=60*1000)
for query_res in result:
# Experiment result transformation, probability conversion, and readout correction
# results = account.readout_data_to_state_probabilities_whole(query_res)
prob = account.probability_calibration(query_res, config_json)
prob = account.probability_correction(prob)
p1.append(prob['1'])
import matplotlib.pyplot as plt
plt.plot(qBiasAmp, p1)
plt.xlabel('qubit0 bias(a.u.)')
plt.ylabel('qubit1 |1> probability')
plt.title('q-q swap')
plt.show()
2D Demo¶
In [1]:
Copied!
# q-q swap, Q50, Q45
import numpy as np
qubit0 = 'Q50'
qubit1 = 'Q45'
coupler = 'G82'
qBiasStartAmp = 725
qBiasEndAmp = 950
qBiasStep = 10
qBiasAmp = np.arange(qBiasStartAmp, qBiasEndAmp, qBiasStep)
durationStart = 100
durationEnd = 2000
durationStep = 100
duration = np.arange(durationStart, durationEnd, durationStep)
numDurations = len(duration)
template1 = '''
X {qubit0}
I {qubit0} 10
B {qubit0} {coupler}
PLS {qubit0} 1 -1 {pulseLength} {qBiasAmplitude} 0 0 0 4
G {coupler} {pulseLength} {g}
I {qubit0} {pulseLength}
I {qubit0} 10
B {qubit0} {qubit1}
M {qubit1}
'''
pulseLength = 1000;
g = -15e6;
template = template1
qCircuits = []
for qBias in qBiasAmp:
for d in duration:
c = template.format(qubit0 = qubit0, qubit1 = qubit1, coupler = coupler, pulseLength = d, qBiasAmplitude = qBias, g = g)
qCircuits.append(c)
print(len(qCircuits))
print(qCircuits[0])
# q-q swap, Q50, Q45
import numpy as np
qubit0 = 'Q50'
qubit1 = 'Q45'
coupler = 'G82'
qBiasStartAmp = 725
qBiasEndAmp = 950
qBiasStep = 10
qBiasAmp = np.arange(qBiasStartAmp, qBiasEndAmp, qBiasStep)
durationStart = 100
durationEnd = 2000
durationStep = 100
duration = np.arange(durationStart, durationEnd, durationStep)
numDurations = len(duration)
template1 = '''
X {qubit0}
I {qubit0} 10
B {qubit0} {coupler}
PLS {qubit0} 1 -1 {pulseLength} {qBiasAmplitude} 0 0 0 4
G {coupler} {pulseLength} {g}
I {qubit0} {pulseLength}
I {qubit0} 10
B {qubit0} {qubit1}
M {qubit1}
'''
pulseLength = 1000;
g = -15e6;
template = template1
qCircuits = []
for qBias in qBiasAmp:
for d in duration:
c = template.format(qubit0 = qubit0, qubit1 = qubit1, coupler = coupler, pulseLength = d, qBiasAmplitude = qBias, g = g)
qCircuits.append(c)
print(len(qCircuits))
print(qCircuits[0])
437 X Q50 I Q50 10 B Q50 G82 PLS Q50 1 -1 100 725 0 0 0 4 G G82 100 -15000000.0 I Q50 100 I Q50 10 B Q50 Q45 M Q45
In [ ]:
Copied!
from ezQgd import *
import math
import time
account = Account(login_key='opecT+SO+QFjLXREUU2f8paSJNtTytPPV8Dbbd2T8Zg=', machine_name='gd_qc1')
# Download the experiment parameters used before submitting
config_json = account.download_config(down_file=False)
exp_name = "qq_swap_{qubit0}_{qubit1}_".format(qubit0 = qubit0, qubit1 = qubit1)+str(int(time.time()))
query_id = account.submit_job(circuit=qCircuits, version=exp_name, num_shots=2000, is_verify=False)
# Query experiment results in batches, and for bulk queries, only the raw data is returned. The backend supports a maximum of 50 experiment IDs for bulk querying.
count = 0
p1 = []
p1_ = []
if query_id:
for idx in range(0, len(query_id), 10):
print(query_id[idx:idx+10])
result=account.query_experiment(query_id[idx:idx+10], max_wait_time=60*1000)
for query_res in result:
# Experiment result transformation, probability conversion, and readout correction
# results = account.readout_data_to_state_probabilities_whole(query_res)
prob = account.probability_calibration(query_res, config_json)
prob = account.probability_correction(prob)
p1_.append(prob['1'])
count = count + 1
if count == numDurations:
p1.append(p1_)
count = 0
p1_ = []
import matplotlib.pyplot as plt
plt.imshow(p1, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.xlabel('duration')
plt.ylabel('qubit bias')
plt.title('q-q swap')
plt.show()
from ezQgd import *
import math
import time
account = Account(login_key='opecT+SO+QFjLXREUU2f8paSJNtTytPPV8Dbbd2T8Zg=', machine_name='gd_qc1')
# Download the experiment parameters used before submitting
config_json = account.download_config(down_file=False)
exp_name = "qq_swap_{qubit0}_{qubit1}_".format(qubit0 = qubit0, qubit1 = qubit1)+str(int(time.time()))
query_id = account.submit_job(circuit=qCircuits, version=exp_name, num_shots=2000, is_verify=False)
# Query experiment results in batches, and for bulk queries, only the raw data is returned. The backend supports a maximum of 50 experiment IDs for bulk querying.
count = 0
p1 = []
p1_ = []
if query_id:
for idx in range(0, len(query_id), 10):
print(query_id[idx:idx+10])
result=account.query_experiment(query_id[idx:idx+10], max_wait_time=60*1000)
for query_res in result:
# Experiment result transformation, probability conversion, and readout correction
# results = account.readout_data_to_state_probabilities_whole(query_res)
prob = account.probability_calibration(query_res, config_json)
prob = account.probability_correction(prob)
p1_.append(prob['1'])
count = count + 1
if count == numDurations:
p1.append(p1_)
count = 0
p1_ = []
import matplotlib.pyplot as plt
plt.imshow(p1, cmap='hot', interpolation='nearest')
plt.colorbar()
plt.xlabel('duration')
plt.ylabel('qubit bias')
plt.title('q-q swap')
plt.show()