Example #1
0
class TimeSlice:
    def setup(self):
        self.s1 = Slice(0, 30)
        self.s2 = Slice(0, 1, 10)

    def time_constructor_slice(self):
        Slice(slice(0, 30))

    def time_constructor_ints(self):
        Slice(0, 1, 10)

    def time_constructor_invalid(self):
        try:
            Slice(0.5)
        except TypeError:
            pass

    def time_reduce(self):
        self.s1.reduce()
        self.s2.reduce()

    def time_reduce_shape(self):
        self.s1.reduce(10)
        self.s2.reduce(10)

    def time_newshape(self):
        self.s1.newshape((10, 5))
        self.s2.newshape((10, 5))

    def time_isempty(self):
        self.s1.isempty()

    def time_isempty_shape(self):
        self.s1.isempty((10, 5))
Example #2
0
    def __setitem__(self, key, value):
        if isinstance(key, np.ndarray):
            key = key.tobytes()
        if not isinstance(key, bytes):
            raise TypeError(f"key must be bytes, got {type(key)}")
        if len(key) != self.hash_size:
            raise ValueError("key must be %d bytes" % self.hash_size)
        if isinstance(value, Tuple):
            if len(value.args) > 1:
                raise NotImplementedError(
                    "Chunking in more other than the first dimension")
            value = value.args[0]
        if not isinstance(value, (slice, Slice)):
            raise TypeError("value must be a slice object")
        value = Slice(value)
        if value.isempty():
            return
        if value.step not in [1, None]:
            raise ValueError("only step-1 slices are supported")

        kv = (list(key), (value.start, value.stop))
        if key in self._indices:
            if bytes(self.hash_table[self._indices[key]])[0] != key:
                raise ValueError(
                    "The key %s is already in the hashtable under another index."
                )
            self.hash_table[self._indices[key]] = kv
        else:
            if self.largest_index >= self.hash_table.shape[0]:
                newshape = (self.hash_table.shape[0] + self.chunk_size, )
                new_hash_table = np.zeros(newshape,
                                          dtype=self.hash_table.dtype)
                new_hash_table[:self.hash_table.shape[0]] = self.hash_table
                self.hash_table = new_hash_table
            self.hash_table[self.largest_index] = kv
            self._indices[key] = self.largest_index
            self.largest_index += 1