Source code for quasimoto.sampler

"""
A module implementing sampler interfaces.
"""

# internal
from quasimoto.sampler.parameters import DEFAULT, SourceParameters
from quasimoto.sampler.source import SourceInterface
from quasimoto.sampler.time import TimeKeeper
from quasimoto.wave.writer import DEFAULT_BITS


[docs] class Sampler(SourceInterface): """A base class for iterable sampler interfaces.""" def __init__( self, time_keeper: TimeKeeper, params: SourceParameters = DEFAULT, num_bits: int = DEFAULT_BITS, ) -> None: """Initialize this instance.""" super().__init__(time_keeper, params=params) # Note: this assumed signed + zero-centered. self.num_bits = num_bits self.scalar = (2 ** (self.num_bits - 1)) - 1 def __copy__(self) -> "Sampler": """Create a copy of this instance.""" return type(self)( self.time_keeper, params=self.params, num_bits=self.num_bits )
[docs] def value(self, now: float) -> int: """Get the next value.""" # Handle phase. time = now # time = now - self.enable_time # Select underlying wave generator. return int( self.scalar * self.by_shape[self.shape.value](time) # type: ignore )