code: def _get_gp_eval_for_parallel_strategy(
      gp, anc_data, uncert_form="std"
  ):
      """Returns the evaluation function of the gp depending on the parallel strategy and
      the evaluations in progress.
      """
  
      # 1. With hallucinations
      def _get_halluc_gp_eval(_gp, _halluc_pts, _uncert_form):
          """Hallucinated GP eval."""
          return lambda x: _gp.eval_with_hallucinated_observations(
              x, _halluc_pts, uncert_form=_uncert_form
          )
  
      # Ordinary eval of gp
      def _get_naive_gp_eval(_gp, _uncert_form):
          """Naive GP eval."""
          return lambda x: _gp.eval(x, uncert_form=_uncert_form)
  
      # Check parallelisation strategy and return
      if (
          anc_data.handle_parallel == "halluc"
          and len(anc_data.eval_points_in_progress) > 0
      ):
          if anc_data.is_mf:
              return _get_halluc_gp_eval(
                  gp,
                  anc_data.eval_fidel_points_in_progress,
                  uncert_form,
              )
          else:
              return _get_halluc_gp_eval(
                  gp, anc_data.eval_points_in_progress, uncert_form
              )
      else:
          return _get_naive_gp_eval(gp, uncert_form)
  
imports: from __future__ import division
  from argparse import Namespace
  from copy import copy
  import numpy
  from scipy.stats import norm
  from ..utils.general_utils import solve_lower_triangular
  from ..gp.gp_core import get_post_covar_from_raw_covar
  from ..exd.domains import EuclideanDomain
  from ..exd.exd_utils import maximise_with_method
label_desc: Use image node_id 2 for calling a global function with example usage: _get_gp_eval_for_parallel_strategy(gp, anc_data, uncert_form) and returns: function, function, _get_naive_gp_eval, _get_halluc_gp_eval, _get_halluc_gp_eval