code: def __load_cif_dic__(dic_file, force=False):
      jsf_dic = f"{dic_file[:-4]}.json"
      jsf = f"{dic_file[:-4]}_summary.json"
      dic = {}
      try:
          if force:
              throw
          dic = json.loads(open(jsf).read())
      except:
          parser = CIFParser()
          parser.parse(open(dic_file))
          json.dump(parser.data, open(jsf_dic, "w"))
          for k, v in parser.data["data_mmcif_pdbx.dic"].items():
              if type(v) != dict or "item_type" not in v:
                  continue
              name = partition_string(k[6:], ".")
              if name[0] not in dic:
                  dic[name[0]] = {}
              dic[name[0]][name[2]] = v["item_type"]["code"][0].strip()
          json.dump(dic, open(jsf, "w"))
  
      typing = {}
      for k, v in dic.items():
          for k2, v2 in v.items():
              if v2 == "float":
                  if k not in typing:
                      typing[k] = {}
                  typing[k][k2] = __CIFFloat__
              elif v2 == "float-range":
                  if k not in typing:
                      typing[k] = {}
                  typing[k][k2] = __cif_float_range__
              elif v2 == "int":
                  if k not in typing:
                      typing[k] = {}
                  typing[k][k2] = __CIFInt__
              elif v2 == "int-range":
                  if k not in typing:
                      typing[k] = {}
                  typing[k][k2] = __cif_int_range__
      return typing
  
imports: import contextlib
  import gzip
  import json
  import re
label_desc: Use image node_id 5 for calling a global function with example usage: __load_cif_dic__(dic_file, force) and returns: typing