> skunks get personal armor with government money > > --- > > i'm still working on rep/dict.py ! > > for a little smidge i didn't have wifi so i made a very simple > file-based backend and just now got it working > > here's my current crash > > File "/home/karl3/projects/rep/rep/dict.py", line 392, in <module> > doc.update([[val,val]]) > File "/home/karl3/projects/rep/rep/dict.py", line 347, in update > super().update(keyhashitems()) > File "/home/karl3/projects/rep/rep/dict.py", line 225, in update > self.array[:] = IterableWithLength(content_generator(), capacity) > ~~~~~~~~~~^^^ > File "/home/karl3/projects/rep/rep/array.py", line 56, in __setitem__ > self.doc[start * sz : stop * sz] = data > ~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^ > File "/home/karl3/projects/rep/rep/rep.py", line 167, in __setitem__ > piece = prefix + data[:] + suffix[:suffixoff] > ~~~~^^^ > File "/home/karl3/projects/rep/rep/rep.py", line 220, in __getitem__ > buf += next(self.iteration) > ^^^^^^^^^^^^^^^^^^^^ > File "/home/karl3/projects/rep/rep/dict.py", line 218, in content_generator > assert superidx * expansion + subidx == > int.from_bytes(dbg_keyhash[:hashbytes], 'big') >> hashshift > > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > AssertionError > > [stares blankly at crash] i wonder what all this funny text means!
(Pdb) p [superidx, expansion, subidx], [hashbytes, dbg_keyhash[:hashbytes], hashshift, int.from_bytes(dbg_keyhash[:hashbytes], 'big') >> hashshift] ([0, 8, 1], [1, b'\x0c', 5, 0]) so the superidx is 0 that means it's engaging the first item of the original array. the subidx is 8, the hashshift is 5, and the expected final index is 0. it's another problem with my bitwise arithmetic (Pdb) list 202 197 assert superidx == newidx >> (hashbits - self._hashbits) 198 #subidx = (newidx >> hashshift) & expansionmask 199 subidx = newidx & expansionmask 200 assert superidx * expansion + subidx == newidx# >> hashshift 201 return subidx 202 for superidx, item in enumerate(tqdm.tqdm(self.array if self._capacity else [self._sentinel], desc='growing sentinel hashtable', leave=False)): 203 update_chunk = [self._sentinel] * expansion 204 if item != self._sentinel: 205 keyhash = self._key(item) 206 newidx = int.from_bytes(keyhash[:hashbytes], 'big') >> hashshift 207 update_chunk[newidx2subidx(newidx)] = item (Pdb) list 213 208 dbg_additions = [] 209 while next_superidx == superidx: 210 item = next_item 211 newidx = next_newidx 212 dbg_additions.append([next_newidx, next_keyhash, next_item]) 213 update_chunk[newidx2subidx(newidx)] = item 214 next_newidx, next_keyhash, next_item = updates.pop() if len(updates) else [1<<hashbits,None,None] 215 next_superidx = next_newidx >> (hashbits - self._hashbits) 216 for subidx, item in enumerate(update_chunk): 217 dbg_keyhash = self._key(item) 218 -> assert superidx * expansion + subidx == int.from_bytes(dbg_keyhash[:hashbytes], 'big') >> hashshift