docs: def generate(self):
          """
          Source generates jobs according to the interarrival time distribution
          """
          inter_arrival_time = 0.0
          while True:
              # wait for next job to arrive
              try:
                  yield self._env.timeout(inter_arrival_time)
  
              except TypeError:
                  # error: arrival time of wrong type
                  error_msg = (
                      "arrival time '{}' has wrong type '{}'".format(
                          inter_arrival_time, type(inter_arrival_time).__name__
                      )
                  )
                  self._logger.error(error_msg)
  
                  # trigger exception
                  raise GGCQArrivalTimeTypeError(error_msg)
  
              except ValueError as exc:
                  if str(exc).startswith('Negative delay'):
                      # error: negative arrival time
                      error_msg = (
                          "negative arrival time {:.2f}".format(
                              inter_arrival_time
                          )
                      )
                      self._logger.error(error_msg)
  
                      # trigger exception
                      raise GGCQNegativeArrivalTimeError(error_msg)
                  else:
                      raise
  
              # job has arrived
              job_id = self._job_id
              self._observer.notify_arrival(time=self._env.now, job_id=job_id)
  
              # get job process
              job = self._job_generator(job_id)
  
              # submit job to queue
              self._env.process(job)
  
              # time for the next job to arrive
              try:
                  inter_arrival_time = next(self._arrival_time_generator)
                  self._job_id += 1
              except StopIteration:
                  # no more jobs to arrive -- exit process
                  self._env.exit()