From 3066b1541e46364447712a1f319c2d02d91470f5 Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Thu, 9 Mar 2023 16:27:22 -0500 Subject: [PATCH] Handle (shorter supported) minor-curve not-in-view Solve this by always scaling the y-range for the major/target curve *before* the final overlay scaling loop; this implicitly always solve the case where the major series is the only one in view. Tidy up debug print formatting and add some loop-end demarcation comment lines. --- piker/ui/_dataviz.py | 5 ++++- piker/ui/view_mode.py | 45 ++++++++++++++++++++++++++++--------------- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/piker/ui/_dataviz.py b/piker/ui/_dataviz.py index d70deb34..3c686619 100644 --- a/piker/ui/_dataviz.py +++ b/piker/ui/_dataviz.py @@ -1422,7 +1422,7 @@ class Viz(Struct): float, float, float, - ]: + ] | None: ''' Calculate and deliver the log-returns scalars specifically according to y-data supported on this ``Viz``'s underlying @@ -1454,6 +1454,9 @@ class Viz(Struct): # yref = arr[read_slc_start][key] read = arr[read_slc][key] + if not read.size: + return None + yref = read[0] ymn, ymx = self.vs.yrange # print( diff --git a/piker/ui/view_mode.py b/piker/ui/view_mode.py index f8992a0a..5b6b22cc 100644 --- a/piker/ui/view_mode.py +++ b/piker/ui/view_mode.py @@ -337,8 +337,9 @@ def overlay_viewlists( # determine start datum in view in_view = viz.vs.in_view - if not in_view.size: - log.warning(f'{viz.name} not in view?') + if in_view.size < 2: + if debug_print: + print(f'{viz.name} not in view?') continue row_start = in_view[0] @@ -501,6 +502,8 @@ def overlay_viewlists( ) profiler(f'{viz.name}@{chart_name} yrange scan complete') + # __ END OF scan phase (loop) __ + # NOTE: if no there were no overlay charts # detected/collected (could be either no group detected or # chart with a single symbol, thus a single viz/overlay) @@ -610,10 +613,8 @@ def overlay_viewlists( ) = overlay_table[full_disp] key = 'open' if viz.is_ohlc else viz.name - xref = minor_in_view[0]['time'] match method: - # Pin this curve to the "major dispersion" (or other # target) curve: # @@ -667,12 +668,16 @@ def overlay_viewlists( f'yref@xref_pin: {yref}\n' ) + mx_scalars = mx_viz.scalars_from_index(xref) + if mx_scalars is None: + continue + ( i_start, y_ref_major, r_up_from_major_at_xref, r_down_from_major_at_xref, - ) = mx_viz.scalars_from_index(xref) + ) = mx_scalars if debug_print: print( @@ -680,8 +685,10 @@ def overlay_viewlists( f'mx_xref: {mx_xref}\n' f'major i_start: {i_start}\n' f'y_ref_major: {y_ref_major}\n' - f'r_up_from_major_at_xref {r_up_from_major_at_xref}\n' - f'r_down_from_major_at_xref: {r_down_from_major_at_xref}\n' + f'r_up_from_major_at_xref ' + f'{r_up_from_major_at_xref}\n' + f'r_down_from_major_at_xref: ' + f'{r_down_from_major_at_xref}\n' f'-----to minor-----\n' f'xref: {xref}\n' f'y_start: {y_start}\n' @@ -711,8 +718,10 @@ def overlay_viewlists( if debug_print: print( - f'RESCALE {mx_viz.name} DUE TO {viz.name} ymn -> {y_min}\n' - f'-> MAJ ymn (w r_down: {r_dn_minor}) -> {mx_ymn}\n\n' + f'RESCALE {mx_viz.name} DUE TO {viz.name} ' + f'ymn -> {y_min}\n' + f'-> MAJ ymn (w r_down: {r_dn_minor}) ' + f'-> {mx_ymn}\n\n' ) # rescale all already scaled curves to new # increased range for this side as @@ -753,8 +762,10 @@ def overlay_viewlists( if debug_print: print( - f'RESCALE {mx_viz.name} DUE TO {viz.name} ymx -> {y_max}\n' - f'-> MAJ ymx (r_up: {r_up_minor} -> {mx_ymx}\n\n' + f'RESCALE {mx_viz.name} DUE TO {viz.name} ' + f'ymx -> {y_max}\n' + f'-> MAJ ymx (r_up: {r_up_minor} ' + f'-> {mx_ymx}\n\n' ) for _view in scaled: @@ -815,6 +826,13 @@ def overlay_viewlists( f'overlay ``method`` is invalid `{method}' ) + # __ END OF transform calc phase (loop) __ + + # finally, scale the major target/dispersion curve to + # the (possibly re-scaled/modified) values were set in + # transform phase loop. + mx_view._set_yrange(yrange=(mx_ymn, mx_ymx)) + if scaled: if debug_print: print( @@ -861,10 +879,7 @@ def overlay_viewlists( '--------------------------------\n' ) - # finally, scale the major target/dispersion curve to - # the (possibly re-scaled/modified) values were set in - # transform phase loop. - mx_view._set_yrange(yrange=(mx_ymn, mx_ymx)) + # __ END OF overlay scale phase (loop) __ if debug_print: print(