docs: def _minigui_report_search_status(self, leaves):
          """Prints the current MCTS search status to stderr.
  
          Reports the current search path, root node's child_Q, root node's
          child_N, the most visited path in a format that can be parsed by
          one of the STDERR_HANDLERS in minigui.ts.
  
          Args:
            leaves: list of leaf MCTSNodes returned by tree_search().
           """
  
          root = self._player.get_root()
  
          msg = {
              "id": hex(id(root)),
              "n": int(root.N),
              "q": float(root.Q),
          }
  
          msg["childQ"] = [int(round(q * 1000)) for q in root.child_Q]
          msg["childN"] = [int(n) for n in root.child_N]
  
          ranked_children = root.rank_children()
          variations = {}
          for i in ranked_children[:15]:
              if root.child_N[i] == 0 or i not in root.children:
                  break
              c = coords.to_gtp(coords.from_flat(i))
              child = root.children[i]
              nodes = child.most_visited_path_nodes()
              moves = [coords.to_gtp(coords.from_flat(m.fmove)) for m in nodes]
              variations[c] = {
                  "n": int(root.child_N[i]),
                  "q": float(root.child_Q[i]),
                  "moves": [c] + moves,
              }
  
          if leaves:
              path = []
              leaf = leaves[0]
              while leaf != root:
                  path.append(leaf.fmove)
                  leaf = leaf.parent
              if path:
                  path.reverse()
                  variations["live"] = {
                      "n": int(root.child_N[path[0]]),
                      "q": float(root.child_Q[path[0]]),
                      "moves": [coords.to_gtp(coords.from_flat(m)) for m in path]
                  }
  
          if variations:
              msg["variations"] = variations
  
          dbg("mg-update:%s" % json.dumps(msg, sort_keys=True))