From d3f5ff1b4f1662e568a8e7ed442cf9491ccf0a2a Mon Sep 17 00:00:00 2001 From: Tyler Goodlet Date: Fri, 25 Nov 2022 13:25:38 -0500 Subject: [PATCH] Go back to hard-coded index field Turns out https://github.com/numba/numba/issues/8622 is real and the suggested `numba.literally` hack doesn't seem to work.. --- piker/data/_pathops.py | 44 ++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/piker/data/_pathops.py b/piker/data/_pathops.py index 62a8a8da..850f3a0b 100644 --- a/piker/data/_pathops.py +++ b/piker/data/_pathops.py @@ -24,18 +24,23 @@ from typing import ( ) import msgspec +from msgspec import field import numpy as np from numpy.lib import recfunctions as rfn -from numba import njit, float64, int64 # , optional -from msgspec import field -# import pyqtgraph as pg -# from PyQt5 import QtGui -# from PyQt5.QtCore import QLineF, QPointF +from numba import ( + types, + njit, + float64, + int64, + optional, +) +from numba.core.types.misc import StringLiteral +# from numba.extending import as_numba_type from ._sharedmem import ( ShmArray, ) -# from .._profile import pg_profile_enabled, ms_slower_then +# from ._source import numba_ohlc_dtype from ._compression import ( ds_m4, ) @@ -474,7 +479,9 @@ class IncrementalFormatter(msgspec.Struct): class OHLCBarsFmtr(IncrementalFormatter): - fields: list[str] = field(default_factory=lambda: ['open', 'high', 'low', 'close']) + fields: list[str] = field( + default_factory=lambda: ['open', 'high', 'low', 'close'] + ) def allocate_xy_nd( self, @@ -515,11 +522,17 @@ class OHLCBarsFmtr(IncrementalFormatter): @staticmethod @njit( - # TODO: for now need to construct this manually for readonly + # NOTE: need to construct this manually for readonly # arrays, see https://github.com/numba/numba/issues/4511 - # ntypes.tuple((float64[:], float64[:], float64[:]))( - # numba_ohlc_dtype[::1], # contiguous + # ( + # types.Array( + # numba_ohlc_dtype, + # 1, + # 'C', + # readonly=True, + # ), # int64, + # types.unicode_type, # optional(float64), # ), nogil=True @@ -528,7 +541,7 @@ class OHLCBarsFmtr(IncrementalFormatter): data: np.ndarray, start: int64, bar_gap: float64 = 0.43, - index_field: str = 'index', + # index_field: str, ) -> tuple[ np.ndarray, @@ -541,8 +554,10 @@ class OHLCBarsFmtr(IncrementalFormatter): ''' size = int(data.shape[0] * 6) + # XXX: see this for why the dtype might have to be defined outside + # the routine. + # https://github.com/numba/numba/issues/4098#issuecomment-493914533 x = np.zeros( - # data, shape=size, dtype=float64, ) @@ -560,7 +575,8 @@ class OHLCBarsFmtr(IncrementalFormatter): high = q['high'] low = q['low'] close = q['close'] - index = float64(q[index_field]) + # index = float64(q[index_field]) + index = float64(q['index']) istart = i * 6 istop = istart + 6 @@ -616,8 +632,8 @@ class OHLCBarsFmtr(IncrementalFormatter): x, y, c = self.path_arrays_from_ohlc( array, start, + # self.index_field, bar_gap=w, - index_field=self.index_field, ) return x, y, c