code: def load_log_data(log_file, data_types_to_skip=()):
      """Loads log data into a dictionary of the form data[data_type][metric][index]."""
      # Load log_file
      assert pathmgr.exists(log_file), "Log file not found: {}".format(
          log_file
      )
      with pathmgr.open(log_file, "r") as f:
          lines = f.readlines()
      # Extract and parse lines that start with _TAG and have a type specified
      lines = [
          l[l.find(_TAG) + len(_TAG) :] for l in lines if _TAG in l
      ]
      lines = [simplejson.loads(l) for l in lines]
      lines = [
          l
          for l in lines
          if _TYPE in l and not l[_TYPE] in data_types_to_skip
      ]
      # Generate data structure accessed by data[data_type][index][metric]
      data_types = [l[_TYPE] for l in lines]
      data = {t: [] for t in data_types}
      for t, line in zip(data_types, lines):
          del line[_TYPE]
          data[t].append(line)
      # Generate data structure accessed by data[data_type][metric][index]
      for t in data:
          metrics = sorted(data[t][0].keys())
          err_str = (
              "Inconsistent metrics in log for _type={}: {}".format(
                  t, metrics
              )
          )
          assert all(
              sorted(d.keys()) == metrics for d in data[t]
          ), err_str
          data[t] = {m: [d[m] for d in data[t]] for m in metrics}
      return data
  
file_path: pycls/pycls/core/logging.py
imports: import builtins
  import decimal
  import logging
  import os
  import sys
  import pycls.core.distributed
  import simplejson
  from pycls.core.config import cfg
  from pycls.core.io import pathmgr
label_desc: Use image node_id 7 for calling a global function with example usage: load_log_data(log_file, data_types_to_skip) and returns: data