<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 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