docs: def add(self, item, count=1):
          '''
          When we receive stream of data, we add them in the chunk
          which has limit on the no. of items that it will store.
          >>> s = StreamCounter(5,5)
          >>> data_stream = ['a','b','c','d']
          >>> for item in data_stream:
          ...     s.add(item)
          >>> s.chunk_size
          5
          >>> s.n_items_seen
          4
          >>> s.n_chunk_items_seen
          4
          >>> s.n_chunks
          0
          >>> from pprint import pprint
          >>> pprint(s.chunked_counts.get(s.n_chunks, {}))
          {'a': 1, 'b': 1, 'c': 1, 'd': 1}
          >>> s.counts_total
          4
          >>> data_stream = ['a','b','c','d','e','f','g','e']
          >>> for item in data_stream:
          ...     s.add(item)
          >>> s.chunk_size
          5
          >>> s.n_items_seen
          12
          >>> s.n_chunk_items_seen
          2
          >>> s.n_chunks
          2
          >>> s.chunked_counts.get(s.n_chunks, {})
          {'g': 1, 'e': 1}
          '''
          self.n_items_seen += count
          self.n_chunk_items_seen += count
  
          # get current chunk
          chunk_id = self.n_chunks
          chunk = self.chunked_counts.get(chunk_id, {})
          self.chunked_counts[chunk_id] = chunk
  
          # update count in the current chunk counter dict
          if item in chunk:
              chunk[item] += count
          else:
              self.n_counts += 1
              chunk[item] = count
  
          # is the current chunk done?
          if self.n_chunk_items_seen >= self.chunk_size:
              self.n_chunks += 1
              self.n_chunk_items_seen = 0
  
          # In case we reached max capacity in count entries,
          # drop oldest chunks until we come back within limit
          while self.n_counts >= self.max_counts:
              self._drop_oldest_chunk()