code: def check_all_types(src_dict, sinks, sourceField):
      # type: (Dict[Text, Any], List[Dict[Text, Any]], Text) -> Dict[Text, List[SrcSink]]
      # sourceField is either "soure" or "outputSource"
      
  
      validation = {"warning": [], "exception": []}  # type: Dict[Text, List[SrcSink]]
      for sink in sinks:
          if sourceField in sink:
              valueFrom = sink.get("valueFrom")
              if isinstance(sink[sourceField], MutableSequence):
                  srcs_of_sink = [src_dict[parm_id] for parm_id in sink[sourceField]]
                  linkMerge = sink.get("linkMerge", ("merge_nested"
                                                     if len(sink[sourceField]) > 1 else None))
              else:
                  parm_id = sink[sourceField]
                  srcs_of_sink = [src_dict[parm_id]]
                  linkMerge = None
              for src in srcs_of_sink:
                  check_result = check_types(src, sink, linkMerge, valueFrom)
                  if check_result == "warning":
                      validation["warning"].append(SrcSink(src, sink, linkMerge))
                  elif check_result == "exception":
                      validation["exception"].append(SrcSink(src, sink, linkMerge))
      return validation
docs: Given a list of sinks, check if their types match with the types of their sources.