コード例 #1
0
ファイル: typedtuple.py プロジェクト: ASPP/numba
def compile_typedtuple(item_type, _tuple_cache=_tuple_cache):
    if item_type in _tuple_cache:
        return _tuple_cache[item_type]

    dtype = item_type.get_dtype()
    methods = orderedcontainer.container_methods(item_type, notimplemented)

    @nb.jit(warn=False)
    class typedtuple(object):

        @nb.void(nb.object_)
        def __init__(self, iterable):

            self.size = 0

            # TODO: Use length hint of iterable for initial buffer size
            self.buf = np.empty(INITIAL_BUFSIZE, dtype=dtype)

            if iterable != None:
                self.__extend(iterable)

        __getitem__ = methods['getitem']
        __append = methods['append']
        index = methods['index']
        count = methods['count']

        @nb.void(nb.object_)
        def __extend(self, iterable):
            for obj in iterable:
                self.__append(obj)

        @nb.Py_ssize_t()
        def __len__(self):
            return self.size

        @nb.c_string_type()
        def __repr__(self):
            buf = ", ".join([str(self.buf[i]) for i in range(self.size)])
            return "(" + buf + ")"

    _tuple_cache[item_type] = typedtuple
    return typedtuple
コード例 #2
0
ファイル: typedtuple.py プロジェクト: winstonewert/numba
def compile_typedtuple(item_type, _tuple_cache=_tuple_cache):
    if item_type in _tuple_cache:
        return _tuple_cache[item_type]

    dtype = item_type.get_dtype()
    methods = orderedcontainer.container_methods(item_type, notimplemented)

    @nb.jit(warn=False)
    class typedtuple(object):
        @nb.void(nb.object_)
        def __init__(self, iterable):

            self.size = 0

            # TODO: Use length hint of iterable for initial buffer size
            self.buf = np.empty(INITIAL_BUFSIZE, dtype=dtype)

            if iterable != None:
                self.__extend(iterable)

        __getitem__ = methods['getitem']
        __append = methods['append']
        index = methods['index']
        count = methods['count']

        @nb.void(nb.object_)
        def __extend(self, iterable):
            for obj in iterable:
                self.__append(obj)

        @nb.Py_ssize_t()
        def __len__(self):
            return self.size

        @nb.c_string_type()
        def __repr__(self):
            buf = ", ".join([str(self.buf[i]) for i in range(self.size)])
            return "(" + buf + ")"

    _tuple_cache[item_type] = typedtuple
    return typedtuple
コード例 #3
0
ファイル: typedlist.py プロジェクト: winstonewert/numba
def compile_typedlist(item_type, _list_cache=_list_cache):
    # item_type_t = typesystem.CastType(item_type)
    # dtype_t = typesystem.numpy_dtype(item_type)

    if item_type in _list_cache:
        return _list_cache[item_type]

    dtype = item_type.get_dtype()
    methods = orderedcontainer.container_methods(item_type, notimplemented)

    @nb.jit(warn=False)
    class typedlist(object):
        @void(object_)
        def __init__(self, iterable):
            self.size = 0

            # TODO: Use length hint of iterable for initial buffer size
            self.buf = np.empty(INITIAL_BUFSIZE, dtype=dtype)

            # TODO: implement 'is'/'is not'
            if iterable != None:
                self.extend(iterable)

        # TODO: Jit __getitem__/__setitem__ of numba extension types

        __getitem__ = methods['getitem']
        __setitem__ = methods['setitem']
        append = methods['append']
        extend = methods['extend']
        index = methods['index']
        count = methods['count']

        @item_type()
        def pop(self):
            # TODO: Optional argument 'index'
            size = self.size - 1
            if size<0:
                [].pop()
            item = self.buf[size]
            self.size = size

            if INITIAL_BUFSIZE < size < self.buf.shape[0] / 2:
                self.buf.resize(int(SHRINK * size), refcheck=False)

            return item

        @void(Py_ssize_t, item_type)
        def insert(self, index, value):
            size = self.size

            if size >= self.buf.shape[0]:
                self.buf.resize(int(size * GROW), refcheck=False)

            if index > size:
                self.append(value)
            else:
                current = self.buf[index]
                self.buf[index] = value
                for i in range(index+1, size+1):
                    next = self.buf[i]
                    self.buf[i] = current
                    current = next
            self.size = size + 1

        @void(item_type)
        def remove(self, value):
            size = self.size
            position = 0
            found = False
           
            if INITIAL_BUFSIZE < size < self.buf.shape[0]/2:
                self.buf.resize(int(SHRINK * size), refcheck=False)

            while position < size and not found:
                if self.buf[position] == value:
                    found = True
                else:
                    position += 1
                    
            if found:
                for i in range(position, size):
                    self.buf[i] = self.buf[i+1]
                self.size = size -1
                # raise ValueError 'not in list'

        @void()
        def reverse(self):
            buf = self.buf
            size = self.size - 1
            for i in range(self.size / 2):
                tmp = buf[i]
                buf[i] = buf[size - i]
                buf[size - i] = tmp

        @void()
        def sort(self):
            # TODO: optional arguments cmp, key, reverse
            self.buf[:self.size].sort()

        @Py_ssize_t()
        def __len__(self):
            return self.size

        @nb.c_string_type()
        def __repr__(self):
            buf = ", ".join([str(self.buf[i]) for i in range(self.size)])
            return "[" + buf + "]"

    _list_cache[item_type] = typedlist
    return typedlist
コード例 #4
0
ファイル: typedlist.py プロジェクト: meteogrid/numba
def compile_typedlist(item_type, _list_cache=_list_cache):
    # item_type_t = typesystem.CastType(item_type)
    # dtype_t = typesystem.NumpyDtypeType(item_type)

    if item_type in _list_cache:
        return _list_cache[item_type]

    dtype = item_type.get_dtype()
    methods = orderedcontainer.container_methods(item_type, notimplemented)

    @nb.jit(warn=False)
    class typedlist(object):
        @void(object_)
        def __init__(self, iterable):
            self.size = 0

            # TODO: Use length hint of iterable for initial buffer size
            self.buf = np.empty(INITIAL_BUFSIZE, dtype=dtype)

            # TODO: implement 'is'/'is not'
            if iterable != None:
                self.extend(iterable)

        # TODO: Jit __getitem__/__setitem__ of numba extension types

        __getitem__ = methods['getitem']
        __setitem__ = methods['setitem']
        append = methods['append']
        extend = methods['extend']
        index = methods['index']
        count = methods['count']

        @item_type()
        def pop(self):
            # TODO: Optional argument 'index'
            size = self.size - 1
            item = self.buf[size]
            self.size = size

            if INITIAL_BUFSIZE < size < self.buf.shape[0] / 2:
                self.buf.resize(int(SHRINK * size), refcheck=False)

            return item

        @void(Py_ssize_t, item_type)
        def insert(self, index, value):
            notimplemented("insert")

        @void(item_type)
        def remove(self, value):
            notimplemented("remove")

        @void()
        def reverse(self):
            buf = self.buf
            size = self.size - 1
            for i in range(self.size / 2):
                tmp = buf[i]
                buf[i] = buf[size - i]
                buf[size - i] = tmp

        @void()
        def sort(self):
            # TODO: optional arguments cmp, key, reverse
            self.buf[:self.size].sort()

        @Py_ssize_t()
        def __len__(self):
            return self.size

        @nb.c_string_type()
        def __repr__(self):
            buf = ", ".join([str(self.buf[i]) for i in range(self.size)])
            return "[" + buf + "]"

    _list_cache[item_type] = typedlist
    return typedlist
コード例 #5
0
ファイル: typedlist.py プロジェクト: dwf/numba
def compile_typedlist(item_type, _list_cache=_list_cache):
    # item_type_t = typesystem.CastType(item_type)
    # dtype_t = typesystem.NumpyDtypeType(item_type)

    if item_type in _list_cache:
        return _list_cache[item_type]

    dtype = item_type.get_dtype()
    methods = orderedcontainer.container_methods(item_type, notimplemented)

    @nb.jit(warn=False)
    class typedlist(object):
        @void(object_)
        def __init__(self, iterable):
            self.size = 0

            # TODO: Use length hint of iterable for initial buffer size
            self.buf = np.empty(INITIAL_BUFSIZE, dtype=dtype)

            # TODO: implement 'is'/'is not'
            if iterable != None:
                self.extend(iterable)

        # TODO: Jit __getitem__/__setitem__ of numba extension types

        __getitem__ = methods['getitem']
        __setitem__ = methods['setitem']
        append = methods['append']
        extend = methods['extend']
        index = methods['index']
        count = methods['count']

        @item_type()
        def pop(self):
            # TODO: Optional argument 'index'
            size = self.size - 1
            item = self.buf[size]
            self.size = size

            if INITIAL_BUFSIZE < size < self.buf.shape[0] / 2:
                self.buf.resize(int(SHRINK * size), refcheck=False)

            return item

        @void(Py_ssize_t, item_type)
        def insert(self, index, value):
            notimplemented("insert")

        @void(item_type)
        def remove(self, value):
            notimplemented("remove")

        @void()
        def reverse(self):
            buf = self.buf
            size = self.size - 1
            for i in range(self.size / 2):
                tmp = buf[i]
                buf[i] = buf[size - i]
                buf[size - i] = tmp

        @void()
        def sort(self):
            # TODO: optional arguments cmp, key, reverse
            self.buf[:self.size].sort()

        @Py_ssize_t()
        def __len__(self):
            return self.size

        @nb.c_string_type()
        def __repr__(self):
            buf = ", ".join([str(self.buf[i]) for i in range(self.size)])
            return "[" + buf + "]"

    _list_cache[item_type] = typedlist
    return typedlist