code: def _inner_parameters_changed(self, kern, X, Z, likelihood, Y, Y_metadata, Lm=None, dL_dKmm=None, psi0=None, psi1=None, psi2=None, **kwargs):
          
          return self.inference_method.inference(kern, X, Z, likelihood, Y, Y_metadata, Lm=Lm,
                                                 dL_dKmm=dL_dKmm, psi0=psi0, psi1=psi1, psi2=psi2, **kwargs)
docs: This is the standard part, which usually belongs in parameters_changed.
  
          For automatic handling of subsampling (such as missing_data, stochastics etc.), we need to put this into an inner
          loop, in order to ensure a different handling of gradients etc of different
          subsets of data.
  
          The dict in current_values will be passed aroung as current_values for
          the rest of the algorithm, so this is the place to store current values,
          such as subsets etc, if necessary.
  
          If Lm and dL_dKmm can be precomputed (or only need to be computed once)
          pass them in here, so they will be passed to the inference_method.
  
          subset_indices is a dictionary of indices. you can put the indices however you
          like them into this dictionary for inner use of the indices inside the
          algorithm.