def _get_series_array_type(dtype): """get underlying default array type of series based on its dtype """ # list(list(str)) if dtype == types.List(string_type): # default data layout is list but split view is used if possible return list_string_array_type # string array elif dtype == string_type: return string_array_type # categorical if isinstance(dtype, PDCategoricalDtype): return CategoricalArray(dtype) # use recarray data layout for series of tuples if isinstance(dtype, types.BaseTuple): if any(not isinstance(t, types.Number) for t in dtype.types): # TODO: support more types. what types can be in recarrays? raise ValueError( "series tuple dtype {} includes non-numerics".format(dtype)) np_dtype = np.dtype(','.join(str(t) for t in dtype.types), align=True) dtype = numba.numpy_support.from_dtype(np_dtype) # TODO: other types? # regular numpy array return types.Array(dtype, 1, 'C')
def _get_dtype_str(t): dtype = t.dtype if isinstance(dtype, PDCategoricalDtype): cat_arr = CategoricalArray(dtype) # HACK: add cat type to numba.types # FIXME: fix after Numba #3372 is resolved cat_arr_name = 'CategoricalArray' + str(ir_utils.next_label()) setattr(types, cat_arr_name, cat_arr) return cat_arr_name if dtype == types.NPDatetime('ns'): dtype = 'NPDatetime("ns")' if t == string_array_type: # HACK: add string_array_type to numba.types # FIXME: fix after Numba #3372 is resolved types.string_array_type = string_array_type return 'string_array_type' return '{}[::1]'.format(dtype)