Move px width log scaling into `ds_m4()`
							parent
							
								
									e2d91f274f
								
							
						
					
					
						commit
						dd6e2604d3
					
				| 
						 | 
					@ -199,25 +199,13 @@ def ohlc_to_m4_line(
 | 
				
			||||||
        use_mxmn=pretrace,
 | 
					        use_mxmn=pretrace,
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if uppx:
 | 
					 | 
				
			||||||
        # optionally log-scale down the "supposed pxs on screen"
 | 
					 | 
				
			||||||
        # as the units-per-px (uppx) get's large.
 | 
					 | 
				
			||||||
        scaler = round(
 | 
					 | 
				
			||||||
            max(
 | 
					 | 
				
			||||||
                # NOTE: found that a 16x px width brought greater
 | 
					 | 
				
			||||||
                # detail, likely due to dpi scaling?
 | 
					 | 
				
			||||||
                # px_width=px_width * 16,
 | 
					 | 
				
			||||||
                128 / (1 + math.log(uppx, 2)),
 | 
					 | 
				
			||||||
                1
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
        px_width *= scaler
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if downsample:
 | 
					    if downsample:
 | 
				
			||||||
        bins, x, y = ds_m4(
 | 
					        bins, x, y = ds_m4(
 | 
				
			||||||
            xpts,
 | 
					            xpts,
 | 
				
			||||||
            flat,
 | 
					            flat,
 | 
				
			||||||
            px_width=px_width,
 | 
					            px_width=px_width,
 | 
				
			||||||
 | 
					            uppx=uppx,
 | 
				
			||||||
 | 
					            log_scale=bool(uppx)
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        x = np.broadcast_to(x[:, None], y.shape)
 | 
					        x = np.broadcast_to(x[:, None], y.shape)
 | 
				
			||||||
        x = (x + np.array([-0.43, 0, 0, 0.43])).flatten()
 | 
					        x = (x + np.array([-0.43, 0, 0, 0.43])).flatten()
 | 
				
			||||||
| 
						 | 
					@ -235,6 +223,8 @@ def ds_m4(
 | 
				
			||||||
    # this is the width of the data in view
 | 
					    # this is the width of the data in view
 | 
				
			||||||
    # in display-device-local pixel units.
 | 
					    # in display-device-local pixel units.
 | 
				
			||||||
    px_width: int,
 | 
					    px_width: int,
 | 
				
			||||||
 | 
					    uppx: Optional[float] = None,
 | 
				
			||||||
 | 
					    log_scale: bool = True,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
) -> tuple[int, np.ndarray, np.ndarray]:
 | 
					) -> tuple[int, np.ndarray, np.ndarray]:
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
| 
						 | 
					@ -261,6 +251,22 @@ def ds_m4(
 | 
				
			||||||
    # "i didn't show it in the sample code, but it's accounted for
 | 
					    # "i didn't show it in the sample code, but it's accounted for
 | 
				
			||||||
    # in the start and end indices and number of bins"
 | 
					    # in the start and end indices and number of bins"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # optionally log-scale down the "supposed pxs on screen"
 | 
				
			||||||
 | 
					    # as the units-per-px (uppx) get's large.
 | 
				
			||||||
 | 
					    if log_scale:
 | 
				
			||||||
 | 
					        assert uppx, 'You must provide a `uppx` value to use log scaling!'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        scaler = round(
 | 
				
			||||||
 | 
					            max(
 | 
				
			||||||
 | 
					                # NOTE: found that a 16x px width brought greater
 | 
				
			||||||
 | 
					                # detail, likely due to dpi scaling?
 | 
				
			||||||
 | 
					                # px_width=px_width * 16,
 | 
				
			||||||
 | 
					                2**6 / (1 + math.log(uppx, 2)),
 | 
				
			||||||
 | 
					                1
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        px_width *= scaler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert px_width > 1  # width of screen in pxs?
 | 
					    assert px_width > 1  # width of screen in pxs?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # NOTE: if we didn't pre-slice the data to downsample
 | 
					    # NOTE: if we didn't pre-slice the data to downsample
 | 
				
			||||||
| 
						 | 
					@ -320,7 +326,7 @@ def ds_m4(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@jit(
 | 
					@jit(
 | 
				
			||||||
    nopython=True,
 | 
					    nopython=True,
 | 
				
			||||||
    # nogil=True,
 | 
					    nogil=True,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
def _m4(
 | 
					def _m4(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue