docs: def run(self, N=1, *args, **kwargs):
          '''Call the parallelized sampler's ``run`` method. Each process
          will run for ``N`` iterations. Then, the master process (process with
          ``rank = 0``) collects the samples and weights from all processes and
          stores it into ``self.samples_list`` and ``self.weights_list``.
          Master process:   Return a list of the return values from the workers.
          Other  processes: Return the same as the sequential sampler.
  
          .. seealso::
  
              :py:class:`pypmc.tools.History`
  
          :param N:
  
              Integer; the number of steps to be passed to the ``run`` method.
  
          :param args, kwargs:
  
              Additional arguments which are passed to the ``sampler_type``'s
              run method.
  
  
          '''
          individual_return = self.sampler.run(N, *args, **kwargs)
  
          # all workers send samples and weights to master
          self.samples_list = self._comm.gather(self.sampler.samples, root=0)
          if hasattr(self.sampler, 'weights'):
              self.weights_list = self._comm.gather(self.sampler.weights, root=0)
  
          # master returns list of worker return values
          master_return = self._comm.gather(individual_return, root=0)
  
          if self._rank == 0:
              return master_return
          else:
              return individual_return