code: def infer_newX(model, Y_new, optimize=True, init='L2'):
      
      infr_m = InferenceX(model, Y_new, init=init)
  
      if optimize:
          infr_m.optimize()
  
      return infr_m.X, infr_m
docs: Infer the distribution of X for the new observed data *Y_new*.
  
      :param model: the GPy model used in inference
      :type model: GPy.core.Model
      :param Y_new: the new observed data for inference
      :type Y_new: numpy.ndarray
      :param optimize: whether to optimize the location of new X (True by default)
      :type optimize: boolean
      :return: a tuple containing the estimated posterior distribution of X and the model that optimize X
      :rtype: (GPy.core.parameterization.variational.VariationalPosterior, GPy.core.Model)