class_docstr: A Model is a network (more precisely, a directed acyclic graph) of Steps,
  and it is defined from the input/output specification of the pipeline.
  Models have fit and predict routines that, together with graph-based engine,
  allow the automatic (feed-forward) computation of each of the pipeline steps
  when fed with data.
  
  Parameters
  ----------
  inputs
      Inputs to the model.
  
  outputs
      Outputs of the model.
  
  targets
      Targets of the model.
  
  name
      Name of the model (optional). If no name is passed, a name will be
      automatically generated.
code: def _normalize_data(
      self,
      data: Union[ArrayLikes, DataDict],
      data_placeholders: List[DataPlaceholder],
  ) -> Dict[DataPlaceholder, ArrayLike]:
      if isinstance(data, dict):
          return self._normalize_dict(data)
      else:
          return self._normalize_list(data, data_placeholders)
  
imports: from collections import defaultdict
  from typing import Union, List, Dict, Set, Iterable, Optional
  from baikal._core.data_placeholder import is_data_placeholder_list, DataPlaceholder
  from baikal._core.digraph import DiGraph
  from baikal._core.step import Step, InputStep, Node
  from baikal._core.typing import ArrayLike
  from baikal._core.utils import listify, safezip2, SimpleCache, unlistify
label_desc: Use image node_id 4 for calling the Model obj's underlying member method code with example usage: obj._normalize_data(data, data_placeholders) and returns: self, self