code: def map_with_retries(self, requests, responses_for_requests):
          
          retries = []
          response_futures = [preq.callable() for preq in requests]
  
          for request, response_future in zip(requests, response_futures):
              try:
                  response = response_future.result()
                  if response is not None and response.status_code == 403:
                      logging.warning('Request to {} caused a 403 response status code.'.format(request.url))
                      raise InvalidRequestError('Access forbidden')
                  if response is not None:
                      responses_for_requests[request] = response
              except RequestException as re:
                  logging.error('An exception was raised for {}: {}'.format(request.url, re))
                  if self.total_retries > 0:
                      self.total_retries -= 1
                      retries.append(request)
  
          # Recursively retry failed requests with the modified total retry count
          if retries:
              self.map_with_retries(retries, responses_for_requests)
docs: Provides session-based retry functionality
  
          :param requests: A collection of Request objects.
          :param responses_for_requests: Dictionary mapping of requests to responses
          :param max_retries: The maximum number of retries to perform per session
          :param args: Additional arguments to pass into a retry mapping call