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
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