Source code for bibliopixel.project.data_maker

import numpy
from ctypes import c_float, c_uint8
from multiprocessing.sharedctypes import RawArray
from .. util import log
from . import importer


# These are just the ones we are sure to work with.  numpy defines a
# lot more, and we pass the names right through, if you want to experiment
# with 'float128' or whatever.
NUMPY_TYPES = (
    'int', 'int8', 'int16', 'int32', 'int64',
    'uint', 'uint8', 'uint16', 'uint32', 'uint64',
    'float', 'float32', 'float64')

NUMPY_DEFAULTS = (True, 'true', 'True', 'float')


[docs]class Maker: def __init__(self, floating=None, shared_memory=False, numpy_dtype=None): if numpy_dtype: log.debug('Using numpy') if numpy_dtype in NUMPY_DEFAULTS: numpy_dtype = 'float32' if numpy_dtype not in numpy.sctypeDict: raise ValueError(BAD_NUMPY_TYPE_ERROR % numpy_dtype) if shared_memory and numpy_dtype: log.error('Shared memory for numpy arrays is not yet supported.') numpy_dtype = None if floating is None: floating = not shared_memory c_type = c_float if floating else c_uint8 if shared_memory: self.bytes = lambda size: RawArray(c_uint8, size) self.color_list = lambda size: RawArray(3 * c_type, size) # Note https://stackoverflow.com/questions/37705974/ elif numpy_dtype: self.bytes = bytearray self.color_list = lambda size: numpy.zeros((size, 3), numpy_dtype) else: self.bytes = bytearray self.color_list = lambda size: [(0, 0, 0)] * size
MAKER = Maker() NUMPY_MAKER = Maker(numpy_dtype='float') ColorList = MAKER.color_list NumpyColorList = NUMPY_MAKER.color_list BAD_NUMPY_TYPE_ERROR = """ Bad numpy_type "%s" Possible numpy_type values include: """ + ' '.join(NUMPY_TYPES)