def describe(self) -> Iterator[str]:
    (yield f'histo = {self.histo}')
    if (self.index is None):
        (yield f'index = {self.index}')
    else:
        (yield f'index with {len(self.index)} items:')
        for (label, nums) in self.index.items():
            (yield f"label = '{label}, size = {len(nums)}:")
            if (self.cache is not None):
                for n in nums:
                    (yield f'cache[{n}] = {self.cache[n]}')
def describe(self) -> Iterator[str]:
    (yield f'histo = {self.histo}')
    if (self.index is None):
        (yield f'index = {self.index}')
    else:
        (yield f'index with {len(self.index)} items:')
        for (label, nums) in self.index.items():
            (yield f"label = '{label}, size = {len(nums)}:")
            if (self.cache is not None):
                for n in nums:
                    (yield f'cache[{n}] = {self.cache[n]}')