code: def unpack_x_y_sample_weight(data):
      """Unpacks user-provided data tuple.
  
      This is a convenience utility to be used when overriding
      `Model.train_step`, `Model.test_step`, or `Model.predict_step`.
      This utility makes it easy to support data of the form `(x,)`,
      `(x, y)`, or `(x, y, sample_weight)`.
  
      Standalone usage:
  
      >>> features_batch = ops.ones((10, 5))
      >>> labels_batch = ops.zeros((10, 5))
      >>> data = (features_batch, labels_batch)
      >>> # `y` and `sample_weight` will default to `None` if not provided.
      >>> x, y, sample_weight = unpack_x_y_sample_weight(data)
      >>> sample_weight is None
      True
  
      Args:
          data: A tuple of the form `(x,)`, `(x, y)`, or `(x, y, sample_weight)`.
  
      Returns:
          The unpacked tuple, with `None`s for `y` and `sample_weight` if they are
          not provided.
      """
      if isinstance(data, list):
          data = tuple(data)
      if not isinstance(data, tuple):
          return (data, None, None)
      elif len(data) == 1:
          return (data[0], None, None)
      elif len(data) == 2:
          return (data[0], data[1], None)
      elif len(data) == 3:
          return (data[0], data[1], data[2])
      error_msg = (
          "Data is expected to be in format `x`, `(x,)`, `(x, y)`, "
          f"or `(x, y, sample_weight)`, found: {data}"
      )
      raise ValueError(error_msg)
  
file_path: keras/keras/trainers/data_adapters/data_adapter_utils.py
imports: import math
  import numpy
  import tree
  from keras import backend
  from keras.api_export import keras_export
label_desc: Use image node_id 1 for calling a global function with example usage: unpack_x_y_sample_weight(data) and returns: data,  None,  None, data,  None,  None, data,  data,  None, data,  data,  data