> > > 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 > > not sure if i posted that i separated wholeidx into byteidx and newidx > because i was sometimes assuming it was downshifted and othertimes > not. [i could have referenced the old code to be consistent, that > might have been clearer, but it is a logical computer-checked system > anyway
(Pdb) p item b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' (Pdb) p update_chunk [b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', bytearray(b'\xd6\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00'), b'\xd6\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x00\x00\x00\x00\x00\x00', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00', b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'] i'm guessing all those 16-long sequences of zeros are bugs in the file backend i tried to add :D
