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..
epoch_indexing_and_dataviz_layer
Tyler Goodlet 2022-11-25 13:25:38 -05:00
parent e45bc4c619
commit d3f5ff1b4f
1 changed files with 30 additions and 14 deletions

View File

@ -24,18 +24,23 @@ from typing import (
) )
import msgspec import msgspec
from msgspec import field
import numpy as np import numpy as np
from numpy.lib import recfunctions as rfn from numpy.lib import recfunctions as rfn
from numba import njit, float64, int64 # , optional from numba import (
from msgspec import field types,
# import pyqtgraph as pg njit,
# from PyQt5 import QtGui float64,
# from PyQt5.QtCore import QLineF, QPointF int64,
optional,
)
from numba.core.types.misc import StringLiteral
# from numba.extending import as_numba_type
from ._sharedmem import ( from ._sharedmem import (
ShmArray, ShmArray,
) )
# from .._profile import pg_profile_enabled, ms_slower_then # from ._source import numba_ohlc_dtype
from ._compression import ( from ._compression import (
ds_m4, ds_m4,
) )
@ -474,7 +479,9 @@ class IncrementalFormatter(msgspec.Struct):
class OHLCBarsFmtr(IncrementalFormatter): 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( def allocate_xy_nd(
self, self,
@ -515,11 +522,17 @@ class OHLCBarsFmtr(IncrementalFormatter):
@staticmethod @staticmethod
@njit( @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 # 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, # int64,
# types.unicode_type,
# optional(float64), # optional(float64),
# ), # ),
nogil=True nogil=True
@ -528,7 +541,7 @@ class OHLCBarsFmtr(IncrementalFormatter):
data: np.ndarray, data: np.ndarray,
start: int64, start: int64,
bar_gap: float64 = 0.43, bar_gap: float64 = 0.43,
index_field: str = 'index', # index_field: str,
) -> tuple[ ) -> tuple[
np.ndarray, np.ndarray,
@ -541,8 +554,10 @@ class OHLCBarsFmtr(IncrementalFormatter):
''' '''
size = int(data.shape[0] * 6) 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( x = np.zeros(
# data,
shape=size, shape=size,
dtype=float64, dtype=float64,
) )
@ -560,7 +575,8 @@ class OHLCBarsFmtr(IncrementalFormatter):
high = q['high'] high = q['high']
low = q['low'] low = q['low']
close = q['close'] close = q['close']
index = float64(q[index_field]) # index = float64(q[index_field])
index = float64(q['index'])
istart = i * 6 istart = i * 6
istop = istart + 6 istop = istart + 6
@ -616,8 +632,8 @@ class OHLCBarsFmtr(IncrementalFormatter):
x, y, c = self.path_arrays_from_ohlc( x, y, c = self.path_arrays_from_ohlc(
array, array,
start, start,
# self.index_field,
bar_gap=w, bar_gap=w,
index_field=self.index_field,
) )
return x, y, c return x, y, c