docs: def delete(self, symbol, chunk_range=None, audit=None):
          """
          Delete all chunks for a symbol, or optionally, chunks within a range
  
          Parameters
          ----------
          symbol : str
              symbol name for the item
          chunk_range: range object
              a date range to delete
          audit: dict
              dict to store in the audit log
          """
          if chunk_range is not None:
              sym = self._get_symbol_info(symbol)
              # read out chunks that fall within the range and filter out
              # data within the range
              df = self.read(symbol, chunk_range=chunk_range, filter_data=False)
              row_adjust = len(df)
              if not df.empty:
                  df = CHUNKER_MAP[sym[CHUNKER]].exclude(df, chunk_range)
  
                  # remove chunks, and update any remaining data
                  query = {SYMBOL: symbol}
                  query.update(CHUNKER_MAP[sym[CHUNKER]].to_mongo(chunk_range))
                  self._collection.delete_many(query)
                  self._mdata.delete_many(query)
                  self.update(symbol, df)
  
                  # update symbol metadata (rows and chunk count)
                  sym = self._get_symbol_info(symbol)
                  sym[LEN] -= row_adjust
                  sym[CHUNK_COUNT] = mongo_count(self._collection, filter={SYMBOL: symbol})
                  self._symbols.replace_one({SYMBOL: symbol}, sym)
  
          else:
              query = {SYMBOL: symbol}
              self._collection.delete_many(query)
              self._symbols.delete_many(query)
              self._mdata.delete_many(query)
  
          if audit is not None:
              audit['symbol'] = symbol
              if chunk_range is not None:
                  audit['rows_deleted'] = row_adjust
                  audit['action'] = 'range delete'
              else:
                  audit['action'] = 'symbol delete'
  
              self._audit.insert_one(audit)