Hipshot, use uppx to drive theoretical px w
parent
b2b31b8f84
commit
82b2d2ee3a
|
@ -181,6 +181,7 @@ def ds_m4(
|
||||||
# in display-device-local pixel units.
|
# in display-device-local pixel units.
|
||||||
px_width: int,
|
px_width: int,
|
||||||
uppx: Optional[float] = None,
|
uppx: Optional[float] = None,
|
||||||
|
xrange: Optional[float] = None,
|
||||||
log_scale: bool = True,
|
log_scale: bool = True,
|
||||||
|
|
||||||
) -> tuple[int, np.ndarray, np.ndarray]:
|
) -> tuple[int, np.ndarray, np.ndarray]:
|
||||||
|
@ -212,6 +213,7 @@ def ds_m4(
|
||||||
# as the units-per-px (uppx) get's large.
|
# as the units-per-px (uppx) get's large.
|
||||||
if log_scale:
|
if log_scale:
|
||||||
assert uppx, 'You must provide a `uppx` value to use log scaling!'
|
assert uppx, 'You must provide a `uppx` value to use log scaling!'
|
||||||
|
# uppx = uppx * math.log(uppx, 2)
|
||||||
|
|
||||||
# scaler = 2**7 / (1 + math.log(uppx, 2))
|
# scaler = 2**7 / (1 + math.log(uppx, 2))
|
||||||
scaler = round(
|
scaler = round(
|
||||||
|
@ -223,37 +225,63 @@ def ds_m4(
|
||||||
1
|
1
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
px_width *= scaler
|
# px_width *= scaler
|
||||||
|
|
||||||
|
# else:
|
||||||
|
# px_width *= 16
|
||||||
|
|
||||||
assert px_width > 1 # width of screen in pxs?
|
assert px_width > 1 # width of screen in pxs?
|
||||||
|
assert uppx > 0
|
||||||
|
|
||||||
# NOTE: if we didn't pre-slice the data to downsample
|
# NOTE: if we didn't pre-slice the data to downsample
|
||||||
# you could in theory pass these as the slicing params,
|
# you could in theory pass these as the slicing params,
|
||||||
# do we care though since we can always just pre-slice the
|
# do we care though since we can always just pre-slice the
|
||||||
# input?
|
# input?
|
||||||
x_start = x[0] # x value start/lowest in domain
|
x_start = x[0] # x value start/lowest in domain
|
||||||
x_end = x[-1] # x end value/highest in domain
|
|
||||||
|
if xrange is None:
|
||||||
|
x_end = x[-1] # x end value/highest in domain
|
||||||
|
xrange = (x_end - x_start)
|
||||||
|
|
||||||
# XXX: always round up on the input pixels
|
# XXX: always round up on the input pixels
|
||||||
px_width = math.ceil(px_width)
|
# lnx = len(x)
|
||||||
|
# uppx *= max(4 / (1 + math.log(uppx, 2)), 1)
|
||||||
|
|
||||||
x_range = x_end - x_start
|
pxw = math.ceil(xrange / uppx)
|
||||||
|
px_width = math.ceil(px_width)
|
||||||
|
|
||||||
# ratio of indexed x-value to width of raster in pixels.
|
# ratio of indexed x-value to width of raster in pixels.
|
||||||
# this is more or less, uppx: units-per-pixel.
|
# this is more or less, uppx: units-per-pixel.
|
||||||
w = x_range / float(px_width)
|
# w = xrange / float(px_width)
|
||||||
|
# uppx = uppx * math.log(uppx, 2)
|
||||||
|
w2 = px_width / uppx
|
||||||
|
|
||||||
|
# scale up the width as the uppx get's large
|
||||||
|
w = uppx# * math.log(uppx, 666)
|
||||||
|
|
||||||
# ensure we make more then enough
|
# ensure we make more then enough
|
||||||
# frames (windows) for the output pixel
|
# frames (windows) for the output pixel
|
||||||
frames = px_width
|
frames = pxw
|
||||||
|
|
||||||
# if we have more and then exact integer's
|
# if we have more and then exact integer's
|
||||||
# (uniform quotient output) worth of datum-domain-points
|
# (uniform quotient output) worth of datum-domain-points
|
||||||
# per windows-frame, add one more window to ensure
|
# per windows-frame, add one more window to ensure
|
||||||
# we have room for all output down-samples.
|
# we have room for all output down-samples.
|
||||||
pts_per_pixel, r = divmod(len(x), frames)
|
pts_per_pixel, r = divmod(xrange, frames)
|
||||||
if r:
|
if r:
|
||||||
frames += 1
|
while r:
|
||||||
|
frames += 1
|
||||||
|
pts_per_pixel, r = divmod(xrange, frames)
|
||||||
|
|
||||||
|
print(
|
||||||
|
f'uppx: {uppx}\n'
|
||||||
|
f'xrange: {xrange}\n'
|
||||||
|
f'px_width: {px_width}\n'
|
||||||
|
f'pxw: {pxw}\n'
|
||||||
|
f'WTF w:{w}, w2:{w2}\n'
|
||||||
|
f'frames: {frames}\n'
|
||||||
|
)
|
||||||
|
assert frames >= (xrange / uppx)
|
||||||
|
|
||||||
# call into ``numba``
|
# call into ``numba``
|
||||||
nb, i_win, y_out = _m4(
|
nb, i_win, y_out = _m4(
|
||||||
|
|
Loading…
Reference in New Issue