Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion qupulse/program/linspace.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

import contextlib
import dataclasses
import warnings

import numpy as np
import math
import copy
Expand All @@ -16,7 +18,7 @@
from qupulse.parameter_scope import Scope, MappedScope, FrozenDict
from qupulse.program import (ProgramBuilder, HardwareTime, HardwareVoltage, Waveform, RepetitionCount, TimeType,
SimpleExpression)
from qupulse.program.waveforms import MultiChannelWaveform
from qupulse.program.volatile import VolatileRepetitionCount, InefficientVolatility

# this resolution is used to unify increments
# the increments themselves remain floats
Expand Down Expand Up @@ -256,6 +258,10 @@ def with_repetition(self, repetition_count: RepetitionCount,
measurements: Optional[Sequence[MeasurementWindow]] = None) -> Iterable['ProgramBuilder']:
if repetition_count == 0:
return
if isinstance(repetition_count, VolatileRepetitionCount):
warnings.warn(f"{type(self).__name__} does not support volatile repetition counts.",
category=InefficientVolatility)

self._stack.append([])
yield self
blocks = self._stack.pop()
Expand Down
7 changes: 1 addition & 6 deletions qupulse/program/loop.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from qupulse.parameter_scope import Scope
from qupulse.program import ProgramBuilder, RepetitionCount, HardwareTime, HardwareVoltage
from qupulse.program.transformation import Transformation
from qupulse.program.volatile import VolatileRepetitionCount, VolatileProperty
from qupulse.program.volatile import VolatileRepetitionCount, VolatileProperty, VolatileModificationWarning
from qupulse.program.waveforms import SequenceWaveform, RepetitionWaveform
from qupulse.program.waveforms import TransformingWaveform
from qupulse.program.waveforms import Waveform, ConstantWaveform
Expand Down Expand Up @@ -727,11 +727,6 @@ class MakeCompatibleWarning(ResourceWarning):
pass


class VolatileModificationWarning(RuntimeWarning):
"""This warning is emitted if the colatile part of a program gets modified. This might imply that the volatile
parameter cannot be change anymore."""


class DroppedMeasurementWarning(RuntimeWarning):
"""This warning is emitted if a measurement was dropped because there was no waveform attached."""

Expand Down
12 changes: 11 additions & 1 deletion qupulse/program/volatile.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
from qupulse.utils import is_integer


__all__ = ['VolatileProperty', 'VolatileValue', 'VolatileRepetitionCount']
__all__ = ['VolatileProperty', 'VolatileValue', 'VolatileRepetitionCount',
'InefficientVolatility', 'VolatileModificationWarning']


VolatileProperty = NamedTuple('VolatileProperty', [('expression', Expression),
Expand Down Expand Up @@ -75,3 +76,12 @@ def __eq__(self, other):
return self._scope is other._scope and self._expression == other._expression
else:
return NotImplemented


class InefficientVolatility(RuntimeWarning):
"""This warning is emitted if the requested volatility of a parameter cannot be implemented efficiently by the backend."""


class VolatileModificationWarning(InefficientVolatility):
"""This warning is emitted if the volatile part of a program gets modified.
This might imply that the volatile parameter cannot be changed anymore."""
Loading