code: def main(OPTS):
      with open(OPTS.data_file) as f:
          dataset_json = json.load(f)
          dataset = dataset_json["data"]
      with open(OPTS.pred_file) as f:
          preds = json.load(f)
      if OPTS.na_prob_file:
          with open(OPTS.na_prob_file) as f:
              na_probs = json.load(f)
      else:
          na_probs = {k: 0.0 for k in preds}
      qid_to_has_ans = make_qid_to_has_ans(
          dataset
      )  # maps qid to True/False
      has_ans_qids = [k for k, v in qid_to_has_ans.items() if v]
      no_ans_qids = [k for k, v in qid_to_has_ans.items() if not v]
      # exact_raw, f1_raw = get_raw_scores(dataset, preds)
      exact_raw, f1_raw = get_raw_scores_extended(dataset, preds)
      exact_thresh = apply_no_ans_threshold(
          exact_raw, na_probs, qid_to_has_ans, OPTS.na_prob_thresh
      )
      f1_thresh = apply_no_ans_threshold(
          f1_raw, na_probs, qid_to_has_ans, OPTS.na_prob_thresh
      )
      out_eval = make_eval_dict(exact_thresh, f1_thresh)
      if has_ans_qids:
          has_ans_eval = make_eval_dict(
              exact_thresh, f1_thresh, qid_list=has_ans_qids
          )
          merge_eval(out_eval, has_ans_eval, "HasAns")
      if no_ans_qids:
          no_ans_eval = make_eval_dict(
              exact_thresh, f1_thresh, qid_list=no_ans_qids
          )
          merge_eval(out_eval, no_ans_eval, "NoAns")
      if OPTS.na_prob_file:
          find_all_best_thresh(
              out_eval,
              preds,
              exact_raw,
              f1_raw,
              na_probs,
              qid_to_has_ans,
          )
      if OPTS.na_prob_file and OPTS.out_image_dir:
          run_precision_recall_analysis(
              out_eval,
              exact_raw,
              f1_raw,
              na_probs,
              qid_to_has_ans,
              OPTS.out_image_dir,
          )
          histogram_na_prob(
              na_probs, has_ans_qids, OPTS.out_image_dir, "hasAns"
          )
          histogram_na_prob(
              na_probs, no_ans_qids, OPTS.out_image_dir, "noAns"
          )
      if OPTS.out_file:
          with open(OPTS.out_file, "w") as f:
              json.dump(out_eval, f)
      else:
          print(json.dumps(out_eval, indent=2))
      return out_eval
  
imports: import argparse
  import collections
  import json
  import numpy
  import os
  import re
  import string
  import sys
label_desc: Use image node_id 20 for calling a global function with example usage: main(OPTS) and returns: out_eval