class_docstr: Utility class to track recall@k for various k, split by categories
class_docstr_tok: ["Utility","class","to","track","recall","@","k","for","various","k",",","split","by","categories"]
docstr: Return a condensed report of the results as a dict of dict.
  report[k][cat] is the recall@k for the given category
docstr_tok: ["Return","a","condensed","report","of","the","results","as","a","dict","of","dict",".","report","[","k","]","[","cat","]","is","the","recall","@","k","for","the","given","category"]
code: def report(self) -> Dict[int, Dict[str, float]]:
      """Return a condensed report of the results as a dict of dict.
      report[k][cat] is the recall@k for the given category
      """
      report: Dict[int, Dict[str, float]] = {}
      for k in self.total_byk_bycat:
          assert k in self.positives_byk_bycat
          report[k] = {
              cat: self.positives_byk_bycat[k][cat]
              / self.total_byk_bycat[k][cat]
              for cat in self.total_byk_bycat[k]
          }
      return report
  
imports: import xml.etree.ElementTree
  from collections import defaultdict
  from pathlib import Path
  from typing import Any, Dict, List, Optional, Sequence, Tuple, Union
  import numpy
  from prettytable import PrettyTable
  from tqdm import tqdm
  import json
  import os
  import re
label_desc: Use image node_id 4 for calling the RecallTracker obj's underlying member method code with example usage: obj.report() and returns: report