class_docstr: Unittest for the EuclideanRandomOptimiser class. 
docstr: Testing random optimiser with ask tell interface. 
docstr_tok: ["Testing","random","optimiser","with","ask","tell","interface","."]
code: def test_ask_tell(self):
      """Testing random optimiser with ask tell interface."""
      self.report(
          "Testing %s using the ask-tell interface." % (type(self))
      )
      domain = domains.EuclideanDomain(
          [[0, 2.3], [3.4, 8.9], [0.12, 1.0]]
      )
      func_caller = EuclideanFunctionCaller(None, domain)
      opt = random_optimiser.EuclideanRandomOptimiser(
          func_caller, ask_tell_mode=True
      )
      opt.initialise()
  
      def evaluate(x):
          return get_syn_func_caller(
              "hartmann3", noise_type="gauss", noise_scale=0.1
          ).func(x)
  
      best_x, best_y = None, float("-inf")
      for _ in range(60):
          x = opt.ask()
          y = evaluate(x)
          opt.tell([(x, y)])
          self.report("x: %s, y: %s" % (x, y))
          if y > best_y:
              best_x, best_y = x, y
      self.report(
          "-----------------------------------------------------"
      )
      self.report(
          "Optimal Value: %s, Optimal Point: %s" % (best_y, best_x)
      )
  
      self.report(
          "-----------------------------------------------------"
      )
      self.report("Regular optimisation using maximise_function")
      val, pt, _ = maximise_function(
          evaluate, domain, 60, opt_method="rand"
      )
      self.report("Optimal Value: %s, Optimal Point: %s" % (val, pt))
  
imports: import numpy
  from ..exd import domains
  from .None import random_optimiser
  from ..exd.experiment_caller import EuclideanFunctionCaller
  from ..exd.worker_manager import SyntheticWorkerManager
  from ..apis.opt import maximise_function, maximise_multifidelity_function
  from ..utils.ancillary_utils import is_nondecreasing, get_list_of_floats_as_str, get_rounded_list
  from ..utils.base_test_class import BaseTestClass, execute_tests
  from ..utils.euclidean_synthetic_functions import get_syn_func_caller, get_mf_cost_function
  from ..utils import reporters
label_desc: Use image node_id 3 for calling the EuclideanRandomOptimiserTestCase obj's underlying member method code with example usage: obj.test_ask_tell() and returns: get_syn_func_caller