code: def extract_info_from_tf_data(
      tf_model: tf.Module,
      dataset: List[Tuple[Tuple[tf.Tensor, ...], Any]],
      dynamic_axis: Dict,
      device: Device,
      **kwargs,
  ):
      from nebullvm.tools.utils import ifnone
  
      input_row = dataset[0][0]
      batch_size = int(input_row[0].shape[0])
      if not all(
          [input_row[0].shape[0] == x.shape[0] for x in input_row]
      ):
          logger.warning(
              "Detected not consistent batch size in the inputs."
          )
  
      input_sizes = [tuple(x.shape) for x in input_row]
      input_types = [
          "int32"
          if x.dtype in [tf.int32, np.int32]
          else "int64"
          if x.dtype in [tf.int64, np.int64]
          else "float16"
          if x.dtype in [tf.float16, np.float16]
          else "float32"
          for x in input_row
      ]
  
      dynamic_axis = ifnone(
          dynamic_axis,
          _extract_dynamic_axis(tf_model, dataset, input_sizes, device),
      )
      return batch_size, input_sizes, input_types, dynamic_axis
  
file_path: nebuly/optimization/nebullvm/nebullvm/tools/tf.py
imports: from typing import Union, List, Tuple, Any, Optional, Dict
  import numpy
  from loguru import logger
  from nebullvm.core.models import Device, DataType, InputInfo
  from nebullvm.optional_modules.tensorflow import tensorflow
label_desc: Use image node_id 5 for calling a global function with example usage: extract_info_from_tf_data(tf_model, dataset, dynamic_axis, device) and returns: batch_size,  input_sizes,  input_types,  dynamic_axis