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())