Skip to content

Commit

Permalink
Merge 980fd00 into c60876c
Browse files Browse the repository at this point in the history
  • Loading branch information
Diego Ristè committed Apr 17, 2020
2 parents c60876c + 980fd00 commit 8bb4a77
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 1 deletion.
10 changes: 9 additions & 1 deletion QGL/Compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -305,8 +305,12 @@ def compile_to_hardware(seqs,
library_version=None,
suffix='',
axis_descriptor=None,
meas_qs = None,
meas_decoupled_qs = None,
CR_chs = None,
CR_decoupled_chs = None,
add_slave_trigger=True,
extra_meta=None,
extra_meta = None,
tdm_seq = False):
'''
Compiles 'seqs' to a hardware description and saves it to 'fileName'.
Expand All @@ -331,6 +335,10 @@ def compile_to_hardware(seqs,
# save input code to file
save_code(seqs, fileName + suffix)

# add decoupling pulses
PatternUtils.decouple_seqs(seqs, meas_qs, meas_decoupled_qs, CR_chs, CR_decoupled_chs)
save_code(seqs, fileName + suffix)

# all sequences should start with a WAIT for synchronization
for seq in seqs:
if not isinstance(seq[0], ControlFlow.Wait):
Expand Down
36 changes: 36 additions & 0 deletions QGL/PatternUtils.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,10 @@
from . import ControlFlow
from . import BlockLabel
from . import TdmInstructions
from . import ChannelLibraries
import QGL.drivers
from functools import reduce
import operator

def hash_pulse(shape):
return hashlib.sha1(shape.tostring()).hexdigest()
Expand Down Expand Up @@ -363,3 +366,36 @@ def flatten_pulses():
print("Updating pulses for {}".format(awg))
translators[awg].update_wf_library(path + "-" + awg + ".aps", ps,
offsets)

def decouple_seqs(seqs, meas_qs, meas_decoupled_qs, CR_chs, CR_decoupled_chs):
for seq in seqs:
if meas_decoupled_qs:
decouple_meas_pulses(seq, meas_qs, meas_decoupled_qs)
if CR_decoupled_chs:
decouple_CR_pulses(seq, CR_chs, CR_decoupled_chs)

def decouple_meas_pulses(seq, meas_qs, meas_decoupled_qs):
"""
Add decoupling X pulses to qubits meas_decoupled_qs during measurement on qubits meas_qs
"""
for (k,pulse) in enumerate(seq):
if isinstance(pulse, Pulse):
for qM in meas_qs:
#TODO: check if pulse block
if pulse.channel == ChannelLibraries.MeasFactory('M-%s' % qM.label):
#TODO: add arbitary shift of X from center
seq[k] = align(pulse *\
reduce(operator.mul, [X(q) for q in meas_decoupled_qs]))

def decouple_CR_pulses(seq, CR_qs, CR_decoupled_qs):
"""
Add decoupling X pulses to qubits CR_decoupled_qs between CR pulses on qubit pairs CR_qs (list of tuples)
"""
for seq_el in seq:
#for qsCR in CR_qs:
if isinstance(seq_el, CompoundGate):
for (k, pulse) in enumerate(seq_el.seq):
if isinstance(pulse.channel, collections.abc.KeysView) and any([ChannelLibraries.EdgeFactory(*qsCR) in pulse.channel for qsCR in CR_qs]):
seq_el.seq[k+1] = reduce(operator.mul, [seq_el.seq[k+1]] + [X(q) for q in CR_decoupled_qs])
elif any([pulse.channel == ChannelLibraries.EdgeFactory(*qsCR) for qsCR in CR_qs]):# and pulse.channel == seq_el.seq[k+2].channel:
seq_el.seq[k+1] = reduce(operator.mul, [seq_el.seq[k+1]] + [X(q) for q in CR_decoupled_qs])

0 comments on commit 8bb4a77

Please sign in to comment.