rohitg00/ai-engineering-from-scratch · error · ValueError
bands ({bands}) must divide num_hashes ({num_hashes})
Error message
bands ({bands}) must divide num_hashes ({num_hashes}) What it means
Error "bands ({bands}) must divide num_hashes ({num_hashes})" thrown in rohitg00/ai-engineering-from-scratch.
Source
Thrown at phases/19-capstone-projects/42-large-corpus-downloader/code/main.py:177
if candidate < best:
best = candidate
sig.append(best)
return sig
class LSHIndex:
"""Locality-sensitive hashing index over MinHash signatures.
Splits each signature into `bands` bands of `rows = num_hashes / bands` rows.
Two signatures collide if they agree on at least one band. The collision
probability is 1 - (1 - s^r)^b where s is Jaccard similarity, which gives
a sharp threshold near s = (1/b)^(1/r). For (b=32, r=4) the threshold is
near s = 0.42; for (b=20, r=5) it is near s = 0.55.
"""
def __init__(self, num_hashes: int, bands: int = DEFAULT_BANDS) -> None:
if bands <= 0 or num_hashes % bands != 0:
raise ValueError(f"bands ({bands}) must divide num_hashes ({num_hashes})")
self.num_hashes = num_hashes
self.bands = bands
self.rows = num_hashes // bands
self._buckets: list[dict[bytes, list[str]]] = [{} for _ in range(bands)]
self._signatures: dict[str, list[int]] = {}
@staticmethod
def _band_key(band: list[int]) -> bytes:
return hashlib.blake2b(b"".join(struct.pack("<Q", v) for v in band), digest_size=16).digest()
def query(self, signature: list[int]) -> str | None:
"""Return the doc id of a near-duplicate keeper or None."""
for i in range(self.bands):
band = signature[i * self.rows : (i + 1) * self.rows]
key = self._band_key(band)
bucket = self._buckets[i].get(key)
if bucket:View on GitHub (pinned to 39ea8a1c6d)
When it happens
Trigger: Thrown at phases/19-capstone-projects/42-large-corpus-downloader/code/main.py:177 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of rohitg00/ai-engineering-from-scratch@39ea8a1c6d (2026-08-26).
Data as JSON: /api/errors/cbd5891bd68b6488.
Report an issue: GitHub.