Source code for qupulse.pulses.metadata

import collections
import dataclasses

from typing import Literal, Optional

from qupulse.utils.types import TimeType

SingleWaveformStrategy = Literal['always']


[docs] @dataclasses.dataclass(frozen=False, eq=False, repr=False) class TemplateMetadata: """This class is used to store metadata for pulse templates. It is the only volatile part of pulse templates and thus does not participate in it's equality operation. It implements the serializable protocol. """ to_single_waveform: Optional[SingleWaveformStrategy] = dataclasses.field(default=None) minimal_sample_rate: Optional[TimeType] = dataclasses.field(default=None) def __init__(self, to_single_waveform: Optional[SingleWaveformStrategy] = None, minimal_sample_rate: Optional[TimeType] = None, **kwargs): # TODO: generate this init automatically # The reason for the custom init is that we want to allow additional kwargs self.to_single_waveform = to_single_waveform self.minimal_sample_rate = minimal_sample_rate for key, value in kwargs.items(): setattr(self, key, value) def __repr__(self): args = ",".join(f"{name}={value!r}" for name, value in self.get_serialization_data().items()) return f'{self.__class__.__name__}({args})'
[docs] def get_serialization_data(self): data = vars(self).copy() for field in dataclasses.fields(self): if field.default is not dataclasses.MISSING: if data[field.name] == field.default: del data[field.name] return data
def __bool__(self): return bool(self.get_serialization_data())