From debe8f711e76a34973838820b6724eff87875055 Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Fri, 23 Apr 2021 12:05:16 +0200 Subject: [PATCH 1/2] add measurement windows for pulse arithmetic --- qupulse/pulses/arithmetic_pulse_template.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/qupulse/pulses/arithmetic_pulse_template.py b/qupulse/pulses/arithmetic_pulse_template.py index ae685f26f..edd9265c5 100644 --- a/qupulse/pulses/arithmetic_pulse_template.py +++ b/qupulse/pulses/arithmetic_pulse_template.py @@ -437,6 +437,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, From 7cd35dfe732048a23e361e161c91ccd8ed835435 Mon Sep 17 00:00:00 2001 From: Pieter Eendebak Date: Mon, 26 Apr 2021 16:35:21 +0200 Subject: [PATCH 2/2] add temporary check --- qupulse/pulses/arithmetic_pulse_template.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/qupulse/pulses/arithmetic_pulse_template.py b/qupulse/pulses/arithmetic_pulse_template.py index edd9265c5..e3c38899c 100644 --- a/qupulse/pulses/arithmetic_pulse_template.py +++ b/qupulse/pulses/arithmetic_pulse_template.py @@ -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, @@ -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 @@ -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') @@ -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, @@ -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: @@ -440,13 +445,13 @@ def parameter_names(self) -> Set[str]: def get_measurement_windows(self, parameters: Dict[str, Real], measurement_mapping: Dict[str, Optional[str]]) -> List[MeasurementWindow]: - measurements=[] + measurements = [] if isinstance(self.lhs, PulseTemplate): measurements.extend(self.lhs.get_measurement_windows(parameters=parameters, - measurement_mapping=measurement_mapping) ) + measurement_mapping=measurement_mapping)) if isinstance(self.rhs, PulseTemplate): measurements.extend(self.rhs.get_measurement_windows(parameters=parameters, - measurement_mapping=measurement_mapping)) + measurement_mapping=measurement_mapping)) return measurements