POC try using yrange mxmn from m4 when downsampling
							parent
							
								
									4ad7b073c3
								
							
						
					
					
						commit
						191b94b67c
					
				| 
						 | 
					@ -337,6 +337,7 @@ class Flow(msgspec.Struct):  # , frozen=True):
 | 
				
			||||||
    name: str
 | 
					    name: str
 | 
				
			||||||
    plot: pg.PlotItem
 | 
					    plot: pg.PlotItem
 | 
				
			||||||
    graphics: Union[Curve, BarItems]
 | 
					    graphics: Union[Curve, BarItems]
 | 
				
			||||||
 | 
					    yrange: tuple[float, float] = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # in some cases a flow may want to change its
 | 
					    # in some cases a flow may want to change its
 | 
				
			||||||
    # graphical "type" or, "form" when downsampling,
 | 
					    # graphical "type" or, "form" when downsampling,
 | 
				
			||||||
| 
						 | 
					@ -416,7 +417,13 @@ class Flow(msgspec.Struct):  # , frozen=True):
 | 
				
			||||||
            if not slice_view.size:
 | 
					            if not slice_view.size:
 | 
				
			||||||
                mxmn = None
 | 
					                mxmn = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            elif self.yrange:
 | 
				
			||||||
 | 
					                # print(f'{self.name} using yrange: {self.yrange}')
 | 
				
			||||||
 | 
					                mxmn = self.yrange
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
 | 
					                print(f'{self.name} MANUAL MAXMIN')
 | 
				
			||||||
 | 
					                # return 0, 0
 | 
				
			||||||
                if self.is_ohlc:
 | 
					                if self.is_ohlc:
 | 
				
			||||||
                    ylow = np.min(slice_view['low'])
 | 
					                    ylow = np.min(slice_view['low'])
 | 
				
			||||||
                    yhigh = np.max(slice_view['high'])
 | 
					                    yhigh = np.max(slice_view['high'])
 | 
				
			||||||
| 
						 | 
					@ -628,10 +635,13 @@ class Flow(msgspec.Struct):  # , frozen=True):
 | 
				
			||||||
            # source data so we clear our path data in prep
 | 
					            # source data so we clear our path data in prep
 | 
				
			||||||
            # to generate a new one from original source data.
 | 
					            # to generate a new one from original source data.
 | 
				
			||||||
            new_sample_rate = True
 | 
					            new_sample_rate = True
 | 
				
			||||||
            showing_src_data = True
 | 
					 | 
				
			||||||
            should_ds = False
 | 
					            should_ds = False
 | 
				
			||||||
            should_redraw = True
 | 
					            should_redraw = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            showing_src_data = True
 | 
				
			||||||
 | 
					            # reset yrange to be computed from source data
 | 
				
			||||||
 | 
					            self.yrange = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # MAIN RENDER LOGIC:
 | 
					        # MAIN RENDER LOGIC:
 | 
				
			||||||
        # - determine in view data and redraw on range change
 | 
					        # - determine in view data and redraw on range change
 | 
				
			||||||
        # - determine downsampling ops if needed
 | 
					        # - determine downsampling ops if needed
 | 
				
			||||||
| 
						 | 
					@ -657,6 +667,10 @@ class Flow(msgspec.Struct):  # , frozen=True):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            **rkwargs,
 | 
					            **rkwargs,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        if showing_src_data:
 | 
				
			||||||
 | 
					            print(f"{self.name} SHOWING SOURCE")
 | 
				
			||||||
 | 
					            # reset yrange to be computed from source data
 | 
				
			||||||
 | 
					            self.yrange = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if not out:
 | 
					        if not out:
 | 
				
			||||||
            log.warning(f'{self.name} failed to render!?')
 | 
					            log.warning(f'{self.name} failed to render!?')
 | 
				
			||||||
| 
						 | 
					@ -664,6 +678,9 @@ class Flow(msgspec.Struct):  # , frozen=True):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        path, data, reset = out
 | 
					        path, data, reset = out
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # if self.yrange:
 | 
				
			||||||
 | 
					        #     print(f'flow {self.name} yrange from m4: {self.yrange}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # XXX: SUPER UGGGHHH... without this we get stale cache
 | 
					        # XXX: SUPER UGGGHHH... without this we get stale cache
 | 
				
			||||||
        # graphics that don't update until you downsampler again..
 | 
					        # graphics that don't update until you downsampler again..
 | 
				
			||||||
        if reset:
 | 
					        if reset:
 | 
				
			||||||
| 
						 | 
					@ -1144,11 +1161,14 @@ class Renderer(msgspec.Struct):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            elif should_ds and uppx > 1:
 | 
					            elif should_ds and uppx > 1:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                x_out, y_out = xy_downsample(
 | 
					                x_out, y_out, ymn, ymx = xy_downsample(
 | 
				
			||||||
                    x_out,
 | 
					                    x_out,
 | 
				
			||||||
                    y_out,
 | 
					                    y_out,
 | 
				
			||||||
                    uppx,
 | 
					                    uppx,
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
 | 
					                self.flow.yrange = ymn, ymx
 | 
				
			||||||
 | 
					                # print(f'{self.flow.name} post ds: ymn, ymx: {ymn},{ymx}')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                reset = True
 | 
					                reset = True
 | 
				
			||||||
                profiler(f'FULL PATH downsample redraw={should_ds}')
 | 
					                profiler(f'FULL PATH downsample redraw={should_ds}')
 | 
				
			||||||
                self._in_ds = True
 | 
					                self._in_ds = True
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue