Skip to content

Commit

Permalink
Merge pull request #577 from QuTech-Delft/fix/arithmetic_template_win…
Browse files Browse the repository at this point in the history
…dows

add measurement windows for pulse arithmetic
  • Loading branch information
terrorfisch committed Apr 27, 2021
2 parents 3b5b694 + 7cd35df commit 661ec9c
Showing 1 changed file with 20 additions and 3 deletions.
23 changes: 20 additions & 3 deletions qupulse/pulses/arithmetic_pulse_template.py
Expand Up @@ -131,6 +131,10 @@ def build_waveform(self,
def get_measurement_windows(self,
parameters: Dict[str, Real],
measurement_mapping: Dict[str, Optional[str]]) -> List[MeasurementWindow]:
import inspect
if not getattr(inspect.getmodule(inspect.stack()[1][0]), '__name__', '').startswith('qupulse'):
warnings.warn("This is only a hack until https://github.com/qutech/qupulse/issues/578 is resolved. "
"Do not call this method directly", category=DeprecationWarning, stacklevel=2)
measurements = super().get_measurement_windows(parameters=parameters,
measurement_mapping=measurement_mapping)
measurements.extend(self.lhs.get_measurement_windows(parameters=parameters,
Expand All @@ -140,7 +144,7 @@ def get_measurement_windows(self,
measurement_mapping=measurement_mapping))
return measurements

def get_serialization_data(self, serializer: Optional[Serializer]=None) -> Dict[str, Any]:
def get_serialization_data(self, serializer: Optional[Serializer] = None) -> Dict[str, Any]:
data = super().get_serialization_data(serializer)
data['rhs'] = self.rhs
data['lhs'] = self.lhs
Expand All @@ -161,7 +165,7 @@ def __repr__(self):
return '(%r %r %r)' % (self.lhs, self.arithmetic_operator, self.rhs)

@classmethod
def deserialize(cls, serializer: Optional[Serializer]=None, **kwargs) -> 'ArithmeticAtomicPulseTemplate':
def deserialize(cls, serializer: Optional[Serializer] = None, **kwargs) -> 'ArithmeticAtomicPulseTemplate':
if serializer:
raise NotImplementedError('Compatibility to old serialization routines not implemented for new type')

Expand All @@ -170,6 +174,7 @@ def deserialize(cls, serializer: Optional[Serializer]=None, **kwargs) -> 'Arithm

class ArithmeticPulseTemplate(PulseTemplate):
""""""

def __init__(self,
lhs: Union[PulseTemplate, ExpressionLike, Mapping[ChannelID, ExpressionLike]],
arithmetic_operator: str,
Expand Down Expand Up @@ -279,7 +284,7 @@ def lhs(self):
@property
def rhs(self):
return self._rhs

def _get_transformation(self,
parameters: Mapping[str, Real],
channel_mapping: Mapping[ChannelID, ChannelID]) -> Transformation:
Expand Down Expand Up @@ -437,6 +442,18 @@ def _scalar_operand_parameters(self) -> FrozenSet[str]:
def parameter_names(self) -> Set[str]:
return self._pulse_template.parameter_names.union(self._scalar_operand_parameters)

def get_measurement_windows(self,
parameters: Dict[str, Real],
measurement_mapping: Dict[str, Optional[str]]) -> List[MeasurementWindow]:
measurements = []
if isinstance(self.lhs, PulseTemplate):
measurements.extend(self.lhs.get_measurement_windows(parameters=parameters,
measurement_mapping=measurement_mapping))
if isinstance(self.rhs, PulseTemplate):
measurements.extend(self.rhs.get_measurement_windows(parameters=parameters,
measurement_mapping=measurement_mapping))
return measurements


def try_operation(lhs: Union[PulseTemplate, ExpressionLike, Mapping[ChannelID, ExpressionLike]],
op: str,
Expand Down

0 comments on commit 661ec9c

Please sign in to comment.