code: def load_cif_data(data, do_clean=True, do_type=True):
      parser = CIFParser()
      if type(data) == str:
          parser.parse_string(data)
      else:
          parser.parse(data)  # fileobj
  
      if not do_clean:
          return parser.data
  
      for k, v in parser.data.items():
          for k2, v2 in v.items():
              for k3, v3 in v2.items():
                  for i in range(len(v3)):
                      v2[k3][i] = (
                          v3[i] not in ["?", "."] and v3[i] or None
                      )
  
      if not do_type or not __MMCIF_TYPING__:
          return parser.data
  
      for _, data in parser.data.items():
          for k, v in __MMCIF_TYPING__.items():
              if k not in data:
                  continue
              for k2, v2 in v.items():
                  if k2 in data[k]:
                      for r in range(len(data[k][k2])):
                          with contextlib.suppress(KeyError):
                              data[k][k2][r] = v2(data[k][k2][r])
      return parser.data
  
imports: import contextlib
  import gzip
  import json
  import re
label_desc: Use image node_id 11 for calling a global function with example usage: load_cif_data(data, do_clean, do_type) and returns: parser, parser, parser