code: def _log_estimator_to_mlflow(
      self, estimator, X_train_sampled, on_worker=False
  ):
      from mlflow.models import infer_signature
  
      if hasattr(estimator, "best_score_") and (
          type(estimator.best_score_) in [int, float]
      ):
          mlflow.log_metric("best_cv_score", estimator.best_score_)
      if hasattr(estimator, "best_params_"):
          mlflow.log_params(estimator.best_params_)
  
      if on_worker:
          mlflow.log_params(estimator.get_params())
          estimator_tags = {
              "estimator_name": estimator.__class__.__name__,
              "estimator_class": (
                  estimator.__class__.__module__
                  + "."
                  + estimator.__class__.__name__
              ),
          }
          mlflow.set_tags(estimator_tags)
      estimator_schema = infer_signature(
          X_train_sampled, estimator.predict(X_train_sampled.copy())
      )
      return mlflow.sklearn.log_model(
          estimator,
          f"{self.name}/estimator",
          signature=estimator_schema,
          code_paths=self.code_paths,
      )
  
imports: import datetime
  import importlib
  import logging
  import os
  import re
  import shutil
  import sys
  import warnings
  import cloudpickle
  import yaml
  import mlflow
  from mlflow.entities import SourceType, ViewType
  from mlflow.environment_variables import MLFLOW_RECIPES_EXECUTION_TARGET_STEP_NAME
  from mlflow.exceptions import BAD_REQUEST, INVALID_PARAMETER_VALUE, MlflowException
  from mlflow.models import Model
  from mlflow.recipes.artifacts import DataframeArtifact, HyperParametersArtifact, ModelArtifact, RunArtifact
  from mlflow.recipes.cards import BaseCard
  from mlflow.recipes.step import BaseStep, StepClass
  from mlflow.recipes.utils.execution import get_step_output_path
  from mlflow.recipes.utils.metrics import _get_builtin_metrics, _get_custom_metrics, _get_error_fn, _get_extended_task, _get_model_type_from_template, _get_primary_metric, _load_custom_metrics, transform_multiclass_metrics_dict
  from mlflow.recipes.utils.step import get_merged_eval_metrics, get_pandas_data_profiles, validate_classification_config
  from mlflow.recipes.utils.tracking import TrackingConfig, apply_recipe_tracking_config, get_recipe_tracking_config, get_run_tags_env_vars, log_code_snapshot
  from mlflow.recipes.utils.wrapped_recipe_model import WrappedRecipeModel
  from mlflow.tracking import MlflowClient
  from mlflow.tracking.fluent import _get_experiment_id
  from mlflow.utils.databricks_utils import get_databricks_env_vars, get_databricks_run_url
  from mlflow.utils.file_utils import TempDir
  from mlflow.utils.mlflow_tags import MLFLOW_RECIPE_PROFILE_NAME, MLFLOW_RECIPE_STEP_NAME, MLFLOW_RECIPE_TEMPLATE_NAME, MLFLOW_SOURCE_TYPE
  from mlflow.utils.string_utils import strip_prefix
label_desc: Use image node_id 21 for calling the TrainStep obj's underlying member method code with example usage: obj._log_estimator_to_mlflow(estimator, X_train_sampled, on_worker) and returns: mlflow