From 3300a240c609e5582b38c7231508bd791c9a99f8 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Fri, 16 Dec 2022 18:19:39 -0500 Subject: [PATCH] Use array-`int`-indexing on single feed Might as well since it makes the chart look less gappy and we can easily flip the index switch now B) Also adds a new `'i_slow_last'` key to `DisplayState` for a singleton across all slow charts and thus no more need for special case logic in `viz.incr_info()`. --- piker/ui/_display.py | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/piker/ui/_display.py b/piker/ui/_display.py index c44fd210..4d13427d 100644 --- a/piker/ui/_display.py +++ b/piker/ui/_display.py @@ -212,10 +212,12 @@ async def graphics_update_loop( assert hist_chart # per-viz-set global last index tracking for global chart - # view UX incrementing. + # view UX incrementing; these values are singleton + # per-multichart-set such that automatic x-domain shifts are only + # done once per time step update. globalz = { - 'i_last': 0, - 'i_last_append': 0, + 'i_last': 0, # multiview-global fast (1s) step index + 'i_last_slow': 0, # multiview-global slow (1m) step index } dss: dict[str, DisplayState] = {} @@ -292,8 +294,7 @@ async def graphics_update_loop( fast_chart.show() last_quote = time.time() - # global _i_last - i_last = ohlcv.index + i_last: float = 0 dss[fqsn] = ds = linked.display_state = DisplayState(**{ 'godwidget': godwidget, @@ -375,13 +376,15 @@ async def graphics_update_loop( do_append and liv ): - # hist_chart.increment_view(steps=i_diff) viz = hist_chart._vizs[fqsn] viz.plot.vb._set_yrange( # yrange=hist_chart.maxmin(name=fqsn) ) # hist_chart.view._set_yrange(yrange=hist_chart.maxmin()) + if should_incr: + hist_chart.increment_view(steps=i_diff) + nurse.start_soon(increment_history_view) # main real-time quotes update loop @@ -878,7 +881,18 @@ async def link_views_with_region( # set the region on the history chart # to the range currently viewed in the # HFT/real-time chart. - region.setRegion(viewRange[0]) + rng = mn, mx = viewRange[0] + + # hist_viz = hist_chart.get_viz(flume.symbol.fqsn) + # hist = hist_viz.shm.array[-3:] + # print( + # f'mn: {mn}\n' + # f'mx: {mx}\n' + # f'slow last 3 epochs: {list(hist["time"])}\n' + # f'slow last 3: {hist}\n' + # ) + + region.setRegion(rng) else: # poll for datums load and timestep detection @@ -1113,6 +1127,12 @@ async def display_symbol_data( tuple[str, Flume] ] = list(feed.flumes.items()) + # use array int-indexing when no aggregate feed overlays are + # loaded. + if len(fitems) == 1: + from ._dataviz import Viz + Viz._index_field = 'index' + # for the "first"/selected symbol we create new chart widgets # and sub-charts for FSPs fqsn, flume = fitems[0]