Skip overlay transform calcs on common-pi curves
If there is a common `PlotItem` used for a set of `Viz`/curves (on a given view) we don't need to do overlay scaling and thus can also short circuit the viz iteration loop early.log_linearized_curve_overlays
parent
74c215d5b2
commit
972b723a5d
|
@ -1088,12 +1088,19 @@ class ChartView(ViewBox):
|
||||||
|
|
||||||
profiler(f'{viz.name}@{chart_name} common pi sort')
|
profiler(f'{viz.name}@{chart_name} common pi sort')
|
||||||
|
|
||||||
|
# non-overlay group case
|
||||||
|
if not viz.is_ohlc:
|
||||||
|
pi.vb._set_yrange(yrange=yrange)
|
||||||
|
profiler(
|
||||||
|
f'{viz.name}@{chart_name} simple std `._set_yrange()`'
|
||||||
|
)
|
||||||
|
|
||||||
# handle overlay log-linearized group scaling cases
|
# handle overlay log-linearized group scaling cases
|
||||||
# TODO: a better predicate here, likely something
|
# TODO: a better predicate here, likely something
|
||||||
# to do with overlays and their settings..
|
# to do with overlays and their settings..
|
||||||
if (
|
# TODO: we probably eventually might want some other
|
||||||
viz.is_ohlc
|
# charts besides OHLC?
|
||||||
):
|
else:
|
||||||
ymn, ymx = yrange
|
ymn, ymx = yrange
|
||||||
# print(f'adding {viz.name} to overlay')
|
# print(f'adding {viz.name} to overlay')
|
||||||
|
|
||||||
|
@ -1137,45 +1144,44 @@ class ChartView(ViewBox):
|
||||||
|
|
||||||
profiler(f'{viz.name}@{chart_name} MINOR curve scale')
|
profiler(f'{viz.name}@{chart_name} MINOR curve scale')
|
||||||
|
|
||||||
# non-overlay group case
|
# NOTE: if no there were no overlay charts
|
||||||
else:
|
# detected/collected (could be either no group detected or
|
||||||
pi.vb._set_yrange(yrange=yrange)
|
# chart with a single symbol, thus a single viz/overlay)
|
||||||
profiler(
|
# then we ONLY set the lone chart's (viz) yrange and short
|
||||||
f'{viz.name}@{chart_name} simple std `._set_yrange()`'
|
# circuit to the next chart in the linked charts loop. IOW
|
||||||
)
|
# there's no reason to go through the overlay dispersion
|
||||||
|
# scaling in the next loop below when only one curve is
|
||||||
# NOTE: if no overlay group scaling is wanted by caller, or
|
# detected.
|
||||||
# there were no overlay charts detected/collected, (could be
|
|
||||||
# either no group detected or chart with a single symbol,
|
|
||||||
# thus a single viz/overlay) then we ONLY set the lone
|
|
||||||
# chart's (viz) yrange and short circuit to the next chart
|
|
||||||
# in the linked charts sequence.
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
len(overlay_table) < 2
|
not mxmns_by_common_pi
|
||||||
or not overlay_table
|
and len(overlay_table) < 2
|
||||||
):
|
):
|
||||||
if debug_print:
|
if debug_print:
|
||||||
print(f'ONLY ranging major: {viz.name}')
|
print(f'ONLY ranging major: {viz.name}')
|
||||||
|
|
||||||
# we're either in `do_overlay_scaling=False` mode
|
out = _maybe_calc_yrange(
|
||||||
# or there is only one curve so we need to pick
|
viz,
|
||||||
# that "only curve".
|
yranges,
|
||||||
if not major_viz:
|
profiler,
|
||||||
major_viz = viz
|
chart_name,
|
||||||
|
|
||||||
if yranges is not None:
|
|
||||||
yrange = yranges.get(major_viz) or yrange
|
|
||||||
|
|
||||||
assert yrange
|
|
||||||
print(f'ONLY ranging major: {viz.name}')
|
|
||||||
major_viz.plot.vb._set_yrange(
|
|
||||||
yrange=yrange,
|
|
||||||
)
|
)
|
||||||
profiler(f'{viz.name}@{chart_name} single curve yrange')
|
if out is None:
|
||||||
if not do_linked_charts:
|
continue
|
||||||
return
|
|
||||||
|
|
||||||
|
read_slc, yrange = out
|
||||||
|
viz.plot.vb._set_yrange(yrange=yrange)
|
||||||
|
profiler(f'{viz.name}@{chart_name} single curve yrange')
|
||||||
|
|
||||||
|
# move to next chart in linked set since
|
||||||
|
# no overlay transforming is needed.
|
||||||
|
continue
|
||||||
|
|
||||||
|
elif (
|
||||||
|
mxmns_by_common_pi
|
||||||
|
and not major_viz
|
||||||
|
):
|
||||||
|
# move to next chart in linked set since
|
||||||
|
# no overlay transforming is needed.
|
||||||
continue
|
continue
|
||||||
|
|
||||||
profiler(f'<{chart_name}>.interact_graphics_cycle({name})')
|
profiler(f'<{chart_name}>.interact_graphics_cycle({name})')
|
||||||
|
@ -1394,6 +1400,9 @@ class ChartView(ViewBox):
|
||||||
# if vrs[1][0] > major_mn:
|
# if vrs[1][0] > major_mn:
|
||||||
# breakpoint()
|
# breakpoint()
|
||||||
|
|
||||||
|
if not do_linked_charts:
|
||||||
|
return
|
||||||
|
|
||||||
profiler.finish()
|
profiler.finish()
|
||||||
|
|
||||||
|
|
||||||
|
@ -1407,8 +1416,6 @@ def _maybe_calc_yrange(
|
||||||
|
|
||||||
if not viz.render:
|
if not viz.render:
|
||||||
return
|
return
|
||||||
# # print(f'skipping {flow.name}')
|
|
||||||
# continue
|
|
||||||
|
|
||||||
# pass in no array which will read and render from the last
|
# pass in no array which will read and render from the last
|
||||||
# passed array (normally provided by the display loop.)
|
# passed array (normally provided by the display loop.)
|
||||||
|
@ -1416,7 +1423,6 @@ def _maybe_calc_yrange(
|
||||||
|
|
||||||
if not in_view:
|
if not in_view:
|
||||||
return
|
return
|
||||||
# continue
|
|
||||||
|
|
||||||
profiler(f'{viz.name}@{chart_name} `Viz.update_graphics()`')
|
profiler(f'{viz.name}@{chart_name} `Viz.update_graphics()`')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue