Breakpoint bad (-ve or too large) x-ranges to m4
This should never really happen but when it does it appears to be a race with writing startup pre-graphics-formatter array data where we get `x_end` epoch value subtracting some really small offset value (like `-/+0.5`) or the opposite where the `x_start` is epoch and `x_end` is small. This adds a warning msg and `breakpoint()` as well as guards around the entire code downsampling code path so that when resumed the downsampling cycle should just be skipped and avoid a crash.multichartz_backup
parent
744268aea0
commit
aadadc53c3
|
@ -91,6 +91,14 @@ def ds_m4(
|
||||||
x_end = x[-1] # x end value/highest in domain
|
x_end = x[-1] # x end value/highest in domain
|
||||||
xrange = (x_end - x_start)
|
xrange = (x_end - x_start)
|
||||||
|
|
||||||
|
if xrange < 0:
|
||||||
|
log.error(f'-VE M4 X-RANGE: {x_start} -> {x_end}')
|
||||||
|
# XXX: broken x-range calc-case, likely the x-end points
|
||||||
|
# are wrong and have some default value set (such as
|
||||||
|
# x_end -> <some epoch float> while x_start -> 0.5).
|
||||||
|
breakpoint()
|
||||||
|
return None
|
||||||
|
|
||||||
# XXX: always round up on the input pixels
|
# XXX: always round up on the input pixels
|
||||||
# lnx = len(x)
|
# lnx = len(x)
|
||||||
# uppx *= max(4 / (1 + math.log(uppx, 2)), 1)
|
# uppx *= max(4 / (1 + math.log(uppx, 2)), 1)
|
||||||
|
|
|
@ -63,20 +63,27 @@ def xy_downsample(
|
||||||
# downsample whenever more then 1 pixels per datum can be shown.
|
# downsample whenever more then 1 pixels per datum can be shown.
|
||||||
# always refresh data bounds until we get diffing
|
# always refresh data bounds until we get diffing
|
||||||
# working properly, see above..
|
# working properly, see above..
|
||||||
bins, x, y, ymn, ymx = ds_m4(
|
m4_out = ds_m4(
|
||||||
x,
|
x,
|
||||||
y,
|
y,
|
||||||
uppx,
|
uppx,
|
||||||
)
|
)
|
||||||
|
|
||||||
# flatten output to 1d arrays suitable for path-graphics generation.
|
if m4_out is not None:
|
||||||
x = np.broadcast_to(x[:, None], y.shape)
|
bins, x, y, ymn, ymx = m4_out
|
||||||
x = (x + np.array(
|
# flatten output to 1d arrays suitable for path-graphics generation.
|
||||||
[-x_spacer, 0, 0, x_spacer]
|
x = np.broadcast_to(x[:, None], y.shape)
|
||||||
)).flatten()
|
x = (x + np.array(
|
||||||
y = y.flatten()
|
[-x_spacer, 0, 0, x_spacer]
|
||||||
|
)).flatten()
|
||||||
|
y = y.flatten()
|
||||||
|
|
||||||
return x, y, ymn, ymx
|
return x, y, ymn, ymx
|
||||||
|
|
||||||
|
# XXX: we accept a None output for the case where the input range
|
||||||
|
# to ``ds_m4()`` is bad (-ve) and we want to catch and debug
|
||||||
|
# that (seemingly super rare) circumstance..
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
@njit(
|
@njit(
|
||||||
|
|
|
@ -211,17 +211,19 @@ class Renderer(msgspec.Struct):
|
||||||
|
|
||||||
elif should_ds and uppx > 1:
|
elif should_ds and uppx > 1:
|
||||||
|
|
||||||
x_1d, y_1d, ymn, ymx = xy_downsample(
|
ds_out = xy_downsample(
|
||||||
x_1d,
|
x_1d,
|
||||||
y_1d,
|
y_1d,
|
||||||
uppx,
|
uppx,
|
||||||
)
|
)
|
||||||
self.viz.yrange = ymn, ymx
|
if ds_out is not None:
|
||||||
# print(f'{self.viz.name} post ds: ymn, ymx: {ymn},{ymx}')
|
x_1d, y_1d, ymn, ymx = ds_out
|
||||||
|
self.viz.yrange = ymn, ymx
|
||||||
|
# print(f'{self.viz.name} post ds: ymn, ymx: {ymn},{ymx}')
|
||||||
|
|
||||||
reset = True
|
reset = True
|
||||||
profiler(f'FULL PATH downsample redraw={should_ds}')
|
profiler(f'FULL PATH downsample redraw={should_ds}')
|
||||||
self._in_ds = True
|
self._in_ds = True
|
||||||
|
|
||||||
path = self.draw_path(
|
path = self.draw_path(
|
||||||
x=x_1d,
|
x=x_1d,
|
||||||
|
|
Loading…
Reference in New Issue