Skip to content

buffer

MinusOneBuffer

Bases: Buffer, ABC

Buffer that subtracts one on loads and adds one on stores.

Source code in src/finch/compile_jl/buffer.py
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
class MinusOneBuffer(Buffer, ABC):
    """Buffer that subtracts one on loads and adds one on stores."""

    def __init__(self, data: NumpyBuffer):
        self.data = data

    @property
    def ftype(self):
        return MinusOneBufferFType(self.data.ftype)

    def length(self):
        return self.data.length()

    @property
    def element_type(self):
        return self.data.element_type

    @property
    def arr(self):
        arr = self.data.arr
        if arr.dtype.names is None:
            return arr - 1
        # a tuple buffer (e.g. a hash table): every field is 1-based
        out = arr.copy()
        for name in arr.dtype.names:
            out[name] -= 1
        return out

    @property
    def length_type(self):
        return self.data.length_type

    def load(self, idx: int):
        return self.data.load(idx) - 1

    def store(self, idx: int, val):
        self.data.store(idx, val + 1)

    def resize(self, len: int):
        self.data.resize(len)

PlusOneBuffer

Bases: Buffer, ABC

Buffer that adds one to each element when loaded and subtracts one from each element when stored.

Source code in src/finch/compile_jl/buffer.py
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
class PlusOneBuffer(Buffer, ABC):
    """
    Buffer that adds one to each element when loaded and subtracts one from each
    element when stored.
    """

    def __init__(self, data: NumpyBuffer):
        self.data = data

    def ftype(self):
        return PlusOneBufferFType(self.data.ftype())

    def length(self):
        return self.data.length()

    @property
    def element_type(self):
        """
        Return the type of elements stored in the buffer.
        This is typically the same as the dtype used to create the buffer.
        """
        return self.data.element_type

    @property
    def length_type(self):
        return self.data.length_type

    def load(self, idx: int):
        return self.data.load(idx) + 1

    def store(self, idx: int, val):
        self.data.store(idx, val - 1)

    def resize(self, len: int):
        self.data.resize(len)

element_type property

Return the type of elements stored in the buffer. This is typically the same as the dtype used to create the buffer.