code: def _run_test(self, train, valid, metric):
      for name, model in self.models.items():
          m = model.create(
              train,
              "target",
              validation_set=valid,
              max_depth=2,
              metric=metric,
          )
          history_header = m.progress.column_names()
          if metric is "auto":
              metric = self.default_metric
  
          if type(metric) is str:
              test_metrics = [metric]
          elif type(metric) is list:
              test_metrics = metric
          else:
              raise TypeError("Invalid metric type")
  
          for name in test_metrics:
              column_name = "Training %s" % self._metric_display_name(
                  name
              )
              self.assertTrue(column_name in history_header)
              final_eval = m.evaluate(train, name)[name]
              progress_evals = m.progress[column_name]
              self.assertAlmostEqual(
                  float(progress_evals[-1]), final_eval, delta=1e-4
              )
              if valid is not None:
                  column_name = (
                      "Validation %s" % self._metric_display_name(name)
                  )
                  self.assertTrue(column_name in history_header)
  
imports: from __future__ import print_function
  from __future__ import division
  from __future__ import absolute_import
  import unittest
  import turicreate
  from turicreate.toolkits._main import ToolkitError
  import random
label_desc: Use image node_id 3 for calling the TreeRegressionTrackingMetricsTest obj's underlying member method code with example usage: obj._run_test(train, valid, metric) without return types