code: def process_elements(self, func, cond=None, doc_ids=None, eids=None):
          
  
          doc_ids = _get_doc_ids(doc_ids, eids)
          data = self._read()
  
          if doc_ids is not None:
              # Processed document specified by id
              for doc_id in doc_ids:
                  func(data, doc_id)
  
          elif cond is not None:
              # Collect affected doc_ids
              doc_ids = []
  
              # Processed documents specified by condition
              for doc_id in list(data):
                  if cond(data[doc_id]):
                      func(data, doc_id)
                      doc_ids.append(doc_id)
          else:
              # Processed documents
              doc_ids = list(data)
  
              for doc_id in doc_ids:
                  func(data, doc_id)
  
          self._write(data)
  
          return doc_ids
docs: Helper function for processing all documents specified by condition
          or IDs.
  
          A repeating pattern in TinyDB is to run some code on all documents
          that match a condition or are specified by their ID. This is
          implemented in this function.
          The function passed as ``func`` has to be a callable. Its first
          argument will be the data currently in the database. Its second
          argument is the document ID of the currently processed document.
  
          See: :meth:`~.update`, :meth:`.remove`
  
          :param func: the function to execute on every included document.
                       first argument: all data
                       second argument: the current eid
          :param cond: query that matches documents to use, or
          :param doc_ids: list of document IDs to use
          :param eids: list of document IDs to use (deprecated)
          :returns: the document IDs that were affected during processing