code: def _validate_batch_log_data(metrics, params, tags):
      for metric in metrics:
          _validate_metric(
              metric.key, metric.value, metric.timestamp, metric.step
          )
          # TODO: move _validate_length_limit calls into _validate_metric etc. This would be a
          # breaking change as _validate_metric is also used in the single-entry log_metric API. Thus
          # we defer it for now to allow for a release of the batched logging APIs without breaking
          # changes to other APIs. See related discussion in
          # https://github.com/mlflow/mlflow/issues/985
          _validate_length_limit(
              "Metric name", MAX_ENTITY_KEY_LENGTH, metric.key
          )
      for param in params:
          _validate_param(param.key, param.value)
      for tag in tags:
          _validate_tag(tag.key, tag.value)
  
imports: import numbers
  import posixpath
  import re
  from typing import List
  from mlflow.entities import Dataset, DatasetInput, InputTag
  from mlflow.exceptions import MlflowException
  from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE
  from mlflow.store.db.db_types import DATABASE_ENGINES
  from mlflow.utils.string_utils import is_string_type
label_desc: Use image node_id 19 for calling a global function with example usage: _validate_batch_log_data(metrics, params, tags) without return types