code: def setup_estimator_config(self, params):
      estimator_config = copy.deepcopy(self.tuner_config)
      estimator_config["model"].update({"args": params["model_space"]})
      estimator_config["strategy"].update(
          {"args": params["strategy_space"]}
      )
      if params.get("data_label_space", None) is not None:
          estimator_config["data"]["args"].update(
              params["data_label_space"]
          )
  
      estimator_path = os.path.join(
          self.tuner_config["experiment"].get("dir", "../"),
          QLibTuner.ESTIMATOR_CONFIG_NAME,
      )
  
      with open(estimator_path, "w") as fp:
          yaml.dump(estimator_config, fp)
  
      return estimator_path
  
imports: import os
  import yaml
  import json
  import copy
  import pickle
  import logging
  import importlib
  import subprocess
  import pandas
  import numpy
  from abc import abstractmethod
  from ...log import get_module_logger, TimeInspector
  from hyperopt import fmin, tpe
  from hyperopt import STATUS_OK, STATUS_FAIL
label_desc: Use image node_id 3 for calling the QLibTuner obj's underlying member method code with example usage: obj.setup_estimator_config(params) and returns: estimator_path