Commit Graph

20 Commits (d9f27ade7e1153915b4214f2b65ccde4e1ebebe3)

Author SHA1 Message Date
Tyler Goodlet d9f27ade7e Add back `.prepareGeometryChange()`, seems faster? 2023-01-30 11:49:37 -05:00
Tyler Goodlet 94cb66daf9 Return `in_view: bool` from `Viz.update_graphics()`
Allows callers to know if they should care about a particular viz
rendering call by immediately knowing if the graphics are in view. This
turns out super useful particularly when doing dynamic y-ranging overlay
calcs.
2023-01-30 11:49:37 -05:00
Tyler Goodlet 5bfd850e4f Rename `.maybe_downsample_graphics()` -> `.interact_graphics_cycle()` 2023-01-30 11:49:37 -05:00
Tyler Goodlet a19ae2015f Fix `Viz.draw_last()` to divide by `.flat_index_ratio` for uppx index lookback 2023-01-30 11:49:37 -05:00
Tyler Goodlet a77c42edf3 Document `Viz.incr_info()` outputs 2023-01-30 11:49:37 -05:00
Tyler Goodlet 55356ae7e8 Support read-slice input to `Viz.maxmin()`
Acts as short cut when pipe-lining from `Viz.update_graphics()` (which
now returns the needed in-view array-relative-read-slice as output) such
that `Viz.read()` and `.datums_range()` doesn't need to be called
internally multiple times. In this case where `i_read_range` is provided
we of course skip doing time index translations and consequently lookup
the appropriate (epoch-time) index indices for caching.
2023-01-30 11:49:36 -05:00
Tyler Goodlet 5dda0ca287 Use `Viz.draw_last()` inside `.update_graphics()`
In an effort to ensure uniform and uppx-optimized last datum graphics
updates call this method directly instead of the equivalent graphics
object thus ensuring we only update the last pixel column according with
the appropriate max/min computed from the last uppx's worth of data.

Fixes / improvements to enable `.draw_last()` usage include,
- change `Viz._render_table` -> `._alt_r: tuple[Renderer, pg.GraphicsItem] | None`
  which holds an alternative (usually downsampled) render and graphics
  obj.
- extend the `.draw_last()` signature to include:
  - `last_read` to allow passing in the already read data from
    `.update_graphics()`, if it isn't passed then a manual read is done
    internally.
  - `reset_cache: bool` which is passed through to the graphics obj.
- use the new `Formatter.flat_index_ratio: float` when indexing into xy
  1d data to compute the max/min for that px column.

Other,
- drop `bars_range` input from `maxmin()` since it's unused.
2023-01-30 11:49:36 -05:00
Tyler Goodlet 6c68c0771e Always cache `read_slc` alongside y-mnmx values 2023-01-30 11:49:36 -05:00
Tyler Goodlet 29f4b562bd Drop x-range query from `ChartPlotWidget.maxmin()`
Move the `Viz.datums_range()` call into `Viz.maxmin()` itself thus
minimizing the chart `.maxmin()` method to an ultra light wrapper around
the viz call. Also move all profiling into the `Viz` method.

Adjust `Viz.maxmin()` to return both the (rounded) x-range values which
correspond to the range containing the y-domain min and max so that
it can be used for up and coming overlay group maxmin calcs.
2023-01-30 11:49:36 -05:00
Tyler Goodlet 6dc09a5709 Take outer-interval values in `Viz.datums_range()` 2023-01-30 11:49:06 -05:00
Tyler Goodlet d68393bfab Better index step value scanning by checking with our expected set 2023-01-30 11:49:06 -05:00
Tyler Goodlet 2dc4aa8a2e Further fixes `Viz.default_view()` and `.index_step()`
Use proper uppx scaling when either of scaling the data to the x-domain
index-range or when the uppx is < 1 (now that we support it) such that
both the fast and slow chart always appropriately scale and offset to
the y-axis with the last datum graphic just adjacent to the order line
arrow markers.

Further this fixes the `.index_step()` calc to use the "earliest" 16
values to compute the expected sample step diff since the last set often
contained gaps due to start up race conditions and generated
unexpected/incorrect output.

Further this drops the `.curve_width_pxs()` method and replaces it with
`.px_width()`, taken from the graphics object API and instead returns
the pixel account for the whole view width instead of the
x-domain-data-range within the view.
2023-01-30 11:49:06 -05:00
Tyler Goodlet 4291707a32 Just-offset-from-arrow-marker on slow chart
We want the fast and slow chart to behave the same on calls to
`Viz.default_view()` so adjust the offset calc to make both work:
- just offset by the line len regardless of step / uppx
- add back the `should_line: bool` output from `render_bar_items()` (and
  use it to set a new `ds_allowed: bool` guard variable) so that we can
  bypass calling the m4 downsampler unless the bars have been switched
  to the interpolation line graphic (which we normally required before
  any downsampling of OHLC graphics data).

Further, this drops use of the `use_vr: bool` flag from all rendering
since we pretty much always use it by default.
2023-01-30 11:49:06 -05:00
Tyler Goodlet 95fd7c3c91 Use `np.diff()` on last 16 samples instead of only last datum pair 2023-01-30 11:49:06 -05:00
Tyler Goodlet 46925b72ad Make `Viz.incr_info()` do treading with time-index, and appending with array-index 2023-01-30 11:49:06 -05:00
Tyler Goodlet dbd5857a7e Rename `reset` -> `reset_cache` 2023-01-30 11:49:06 -05:00
Tyler Goodlet 8f764542d5 Make `Viz.incr_info()` sample rate agnostic
Mainly it was the global (should we )increment logic that needs to be
independent for the fast vs. slow chart such that the slow isn't
update-shifted by the fast and vice versa. We do this using a new
`'i_last_slow'` key in the `DisplayState.globalz: dict` which is
singleton for each sample-rate-specific chart and works for both time
and array indexing.

Also, we drop some old commented `graphics.draw_last_datum()` code that
never ended up being needed again inside the coordinate cache reset
bloc.
2023-01-30 11:49:06 -05:00
Tyler Goodlet 6412b4ab5a `Viz._index_field` a `typing.Literal[str]` 2023-01-30 11:49:06 -05:00
Tyler Goodlet bd23d254da Move `DisplayState.incr_info()` -> `Viz` 2023-01-30 11:49:06 -05:00
Tyler Goodlet 89b6fde1ef Move `Viz` layer to new `.ui` mod 2023-01-30 11:49:06 -05:00