Skip to content

Commit

Permalink
Fix for frequencies not overlapping. With @aorgazf.
Browse files Browse the repository at this point in the history
  • Loading branch information
jevillegasdatTII authored and hay-k committed Oct 23, 2024
1 parent 1e56825 commit 21e795b
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 24 deletions.
1 change: 0 additions & 1 deletion src/qibolab/compilers/compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,5 +167,4 @@ def compile(self, circuit, platform):
# properly map acquisition results to measurement gates
if isinstance(gate, gates.M):
measurement_map[gate] = gate_sequence

return sequence, measurement_map
55 changes: 32 additions & 23 deletions src/qibolab/pulses.py
Original file line number Diff line number Diff line change
Expand Up @@ -1587,30 +1587,39 @@ def separate_overlapping_pulses(self): # -> dict((int,int): PulseSequence):
"""Separates a sequence of overlapping pulses into a list of non-
overlapping sequences."""

# This routine separates the pulses of a sequence into non-overlapping sets
# but it does not check if the frequencies of the pulses within a set have the same frequency

separated_pulses = []
for new_pulse in self.pulses:
stored = False
for ps in separated_pulses:
overlaps = False
for existing_pulse in ps:
if (
new_pulse.start < existing_pulse.finish
and new_pulse.finish > existing_pulse.start
):
overlaps = True
# This routine separates the pulses of a sequence into sets of different frequecy, non-overlapping
# pulses

freqs = set()
for pulse in self.pulses:
freqs |= {pulse.frequency}
PS_freq = {}
separated_pulses = {}
for freq in freqs:
PS_freq[freq] = PulseSequence()
separated_pulses[freq] = []
for pulse in self.pulses:
if pulse.frequency == freq:
PS_freq[freq].add(pulse)

for new_pulse in PS_freq[freq]:
stored = False
for ps in separated_pulses[freq]:
overlaps = False
for existing_pulse in ps:
if (
new_pulse.start < existing_pulse.finish
and new_pulse.finish > existing_pulse.start
):
overlaps = True
break
if not overlaps:
ps.add(new_pulse)
stored = True
break
if not overlaps:
ps.add(new_pulse)
stored = True
break
if not stored:
separated_pulses.append(PulseSequence(new_pulse))
return separated_pulses

# TODO: Implement separate_different_frequency_pulses()
if not stored:
separated_pulses[freq].append(PulseSequence(new_pulse))
return [ps for freq in freqs for ps in separated_pulses[freq]]

@property
def pulses_overlap(self) -> bool:
Expand Down

0 comments on commit 21e795b

Please sign in to comment.