class_docstr: Client of an MLflow Tracking Server that creates and manages experiments and runs.
class_docstr_tok: ["Client","of","an","MLflow","Tracking","Server","that","creates","and","manages","experiments","and","runs","."]
docstr: Log multiple metrics, params, and/or tags.
  
  :param run_id: String ID of the run
  :param metrics: If provided, List of Metric(key, value, timestamp) instances.
  :param params: If provided, List of Param(key, value) instances.
  :param tags: If provided, List of RunTag(key, value) instances.
  :param synchronous: *Experimental* If True, blocks until the metrics/tags/params are logged
                      successfully. If False, logs the metrics/tags/params asynchronously
                      and returns a future representing the logging operation.
  
  Raises an MlflowException if any errors occur.
  
  :return: When synchronous=True, returns None.
           When synchronous=False, returns :py:class:`mlflow.RunOperations` that
           represents future for logging operation.
docstr_tok: ["Log","multiple","metrics",",","params",",","and\/or","tags",".",":","param","run_id",":","String","ID","of","the","run",":","param","metrics",":","If","provided",",","List","of","Metric","(","key",",","value",",","timestamp",")","instances",".",":","param","params",":","If","provided",",","List","of","Param","(","key",",","value",")","instances",".",":","param","tags",":","If","provided",",","List","of","RunTag","(","key",",","value",")","instances",".",":","param","synchronous",":","*","Experimental","*","If","True",",","blocks","until","the","metrics\/tags\/params","are","logged","successfully",".","If","False",",","logs","the","metrics\/tags\/params","asynchronously","and","returns","a","future","representing","the","logging","operation",".","Raises","an","MlflowException","if","any","errors","occur",".",":","return",":","When","synchronous=True",",","returns","None",".","When","synchronous=False",",","returns",":","py",":","class",":","`","mlflow.RunOperations","`","that","represents","future","for","logging","operation","."]
code: def log_batch(
      self, run_id, metrics=(), params=(), tags=(), synchronous=True
  ) -> Optional[RunOperations]:
      """
      Log multiple metrics, params, and/or tags.
  
      :param run_id: String ID of the run
      :param metrics: If provided, List of Metric(key, value, timestamp) instances.
      :param params: If provided, List of Param(key, value) instances.
      :param tags: If provided, List of RunTag(key, value) instances.
      :param synchronous: *Experimental* If True, blocks until the metrics/tags/params are logged
                          successfully. If False, logs the metrics/tags/params asynchronously
                          and returns a future representing the logging operation.
  
      Raises an MlflowException if any errors occur.
  
      :return: When synchronous=True, returns None.
               When synchronous=False, returns :py:class:`mlflow.RunOperations` that
               represents future for logging operation.
      """
      if len(metrics) == 0 and len(params) == 0 and len(tags) == 0:
          return
  
      param_batches = chunk_list(params, MAX_PARAMS_TAGS_PER_BATCH)
      tag_batches = chunk_list(tags, MAX_PARAMS_TAGS_PER_BATCH)
  
      # When given data is split into one or more batches, we need to wait for all the batches.
      # Each batch logged returns run_operations which we append to this list
      # At the end we merge all the run_operations into a single run_operations object and return.
      # Applicable only when synchronous is False
      run_operations_list = []
  
      for params_batch, tags_batch in zip_longest(
          param_batches, tag_batches, fillvalue=[]
      ):
          metrics_batch_size = min(
              MAX_ENTITIES_PER_BATCH
              - len(params_batch)
              - len(tags_batch),
              MAX_METRICS_PER_BATCH,
          )
          metrics_batch_size = max(metrics_batch_size, 0)
          metrics_batch = metrics[:metrics_batch_size]
          metrics = metrics[metrics_batch_size:]
  
          if synchronous:
              self.store.log_batch(
                  run_id=run_id,
                  metrics=metrics_batch,
                  params=params_batch,
                  tags=tags_batch,
              )
          else:
              run_operations_list.append(
                  self.store.log_batch_async(
                      run_id=run_id,
                      metrics=metrics_batch,
                      params=params_batch,
                      tags=tags_batch,
                  )
              )
  
      for metrics_batch in chunk_list(
          metrics, chunk_size=MAX_METRICS_PER_BATCH
      ):
          if synchronous:
              self.store.log_batch(
                  run_id=run_id,
                  metrics=metrics_batch,
                  params=[],
                  tags=[],
              )
          else:
              run_operations_list.append(
                  self.store.log_batch_async(
                      run_id=run_id,
                      metrics=metrics_batch,
                      params=[],
                      tags=[],
                  )
              )
  
      if not synchronous:
          # Merge all the run operations into a single run operations object
          return get_combined_run_operations(run_operations_list)
  
imports: import os
  from collections import OrderedDict
  from itertools import zip_longest
  from typing import List, Optional
  from mlflow.entities import ExperimentTag, Metric, Param, RunStatus, RunTag, ViewType
  from mlflow.entities.dataset_input import DatasetInput
  from mlflow.exceptions import MlflowException
  from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE, ErrorCode
  from mlflow.store.artifact.artifact_repository_registry import get_artifact_repository
  from mlflow.store.tracking import GET_METRIC_HISTORY_MAX_RESULTS, SEARCH_MAX_RESULTS_DEFAULT
  from mlflow.tracking._tracking_service import utils
  from mlflow.tracking.metric_value_conversion_utils import convert_metric_value_to_float_if_possible
  from mlflow.utils import chunk_list
  from mlflow.utils.async_logging.run_operations import RunOperations, get_combined_run_operations
  from mlflow.utils.mlflow_tags import MLFLOW_USER
  from mlflow.utils.string_utils import is_string_type
  from mlflow.utils.time import get_current_time_millis
  from mlflow.utils.uri import add_databricks_profile_info_to_artifact_uri
  from mlflow.utils.validation import MAX_ENTITIES_PER_BATCH, MAX_METRICS_PER_BATCH, MAX_PARAMS_TAGS_PER_BATCH, PARAM_VALIDATION_MSG, _validate_experiment_artifact_location, _validate_run_id
label_desc: Use image node_id 19 for calling the TrackingServiceClient obj's underlying member method code with example usage: obj.log_batch(run_id, metrics, params, tags, synchronous) and returns: get_combined_run_operations