code: def make_precision_recall_eval(
      scores,
      na_probs,
      num_true_pos,
      qid_to_has_ans,
      out_image=None,
      title=None,
  ):
      qid_list = sorted(na_probs, key=lambda k: na_probs[k])
      true_pos = 0.0
      cur_p = 1.0
      cur_r = 0.0
      precisions = [1.0]
      recalls = [0.0]
      avg_prec = 0.0
      for i, qid in enumerate(qid_list):
          if qid_to_has_ans[qid]:
              true_pos += scores[qid]
          cur_p = true_pos / float(i + 1)
          cur_r = true_pos / float(num_true_pos)
          if (
              i == len(qid_list) - 1
              or na_probs[qid] != na_probs[qid_list[i + 1]]
          ):
              # i.e., if we can put a threshold after this point
              avg_prec += cur_p * (cur_r - recalls[-1])
              precisions.append(cur_p)
              recalls.append(cur_r)
      if out_image:
          plot_pr_curve(precisions, recalls, out_image, title)
      return {"ap": 100.0 * avg_prec}
  
imports: import argparse
  import collections
  import json
  import os
  import re
  import string
  import sys
  import numpy
label_desc: Use image node_id 12 for calling a global function with example usage: make_precision_recall_eval(scores, na_probs, num_true_pos, qid_to_has_ans, out_image, title) and returns: dict