Better index step value scanning by checking with our expected set
parent
42d3537516
commit
4c51a68691
|
@ -217,6 +217,9 @@ def render_baritems(
|
|||
)
|
||||
|
||||
|
||||
_sample_rates: set[float] = {1, 60}
|
||||
|
||||
|
||||
class Viz(msgspec.Struct): # , frozen=True):
|
||||
'''
|
||||
(Data) "Visualization" compound type which wraps a real-time
|
||||
|
@ -284,15 +287,33 @@ class Viz(msgspec.Struct): # , frozen=True):
|
|||
reset: bool = False,
|
||||
|
||||
) -> float:
|
||||
|
||||
# attempt to dectect the best step size by scanning a sample of
|
||||
# the source data.
|
||||
if self._index_step is None:
|
||||
|
||||
index = self.shm.array[self.index_field]
|
||||
isample = index[:16]
|
||||
mxdiff = np.diff(isample).max()
|
||||
|
||||
mxdiff: None | float = None
|
||||
for step in np.diff(isample):
|
||||
if step in _sample_rates:
|
||||
if (
|
||||
mxdiff is not None
|
||||
and step != mxdiff
|
||||
):
|
||||
raise ValueError(
|
||||
f'Multiple step sizes detected? {mxdiff}, {step}'
|
||||
)
|
||||
mxdiff = step
|
||||
|
||||
self._index_step = max(mxdiff, 1)
|
||||
if (
|
||||
mxdiff < 1
|
||||
or 1 < mxdiff < 60
|
||||
):
|
||||
# TODO: remove this once we're sure the above scan loop
|
||||
# is rock solid.
|
||||
breakpoint()
|
||||
|
||||
return self._index_step
|
||||
|
|
Loading…
Reference in New Issue