docs: def _get_kernel_data(self, nmr_samples, thinning, return_output):
          """Get the kernel data we will input to the MCMC sampler.
  
          This sets the items:
  
          * data: the pointer to the user provided data
          * method_data: the data specific to the MCMC method
          * nmr_iterations: the number of iterations to sample
          * iteration_offset: the current sample index, that is, the offset to the given number of iterations
          * rng_state: the random number generator state
          * current_chain_position: the current position of the sampled chain
          * current_log_likelihood: the log likelihood of the current position on the chain
          * current_log_prior: the log prior of the current position on the chain
  
          Additionally, if ``return_output`` is True, we add to that the arrays:
  
          * samples: for the samples
          * log_likelihoods: for storing the log likelihoods
          * log_priors: for storing the priors
  
          Args:
              nmr_samples (int): the number of samples we will draw
              thinning (int): the thinning factor we want to use
              return_output (boolean): if the kernel should return output
  
          Returns:
              dict[str: mot.lib.utils.KernelData]: the kernel input data
          """
          kernel_data = {
              'data': self._data,
              'method_data': self._get_mcmc_method_kernel_data(),
              'nmr_iterations': Scalar(nmr_samples * thinning, ctype='ulong'),
              'iteration_offset': Scalar(self._sampling_index, ctype='ulong'),
              'rng_state': Array(self._rng_state, 'uint', mode='rw', ensure_zero_copy=True),
              'current_chain_position': Array(self._current_chain_position, 'mot_float_type',
                                              mode='rw', ensure_zero_copy=True),
              'current_log_likelihood': Array(self._current_log_likelihood, 'mot_float_type',
                                              mode='rw', ensure_zero_copy=True),
              'current_log_prior': Array(self._current_log_prior, 'mot_float_type',
                                         mode='rw', ensure_zero_copy=True),
          }
  
          if return_output:
              kernel_data.update({
                  'samples': Zeros((self._nmr_problems, self._nmr_params, nmr_samples), ctype='mot_float_type'),
                  'log_likelihoods': Zeros((self._nmr_problems, nmr_samples), ctype='mot_float_type'),
                  'log_priors': Zeros((self._nmr_problems, nmr_samples), ctype='mot_float_type'),
              })
          return kernel_data