code: def bulk(client, actions, stats_only=False, **kwargs):
      
      success, failed = 0, 0
  
      # list of errors to be collected is not stats_only
      errors = []
  
      for ok, item in streaming_bulk(client, actions, **kwargs):
          # go through request-reponse pairs and detect failures
          if not ok:
              if not stats_only:
                  errors.append(item)
              failed += 1
          else:
              success += 1
  
      return success, failed if stats_only else errors
docs: Helper for the :meth:`~elasticsearch.Elasticsearch.bulk` api that provides
      a more human friendly interface - it consumes an iterator of actions and
      sends them to elasticsearch in chunks. It returns a tuple with summary
      information - number of successfully executed actions and either list of
      errors or number of errors if `stats_only` is set to `True`.
      See :func:`~elasticsearch.helpers.streaming_bulk` for more accepted
      parameters
      :arg client: instance of :class:`~elasticsearch.Elasticsearch` to use
      :arg actions: iterator containing the actions
      :arg stats_only: if `True` only report number of successful/failed
          operations instead of just number of successful and a list of error responses
      Any additional keyword arguments will be passed to
      :func:`~elasticsearch.helpers.streaming_bulk` which is used to execute
      the operation.