class_docstr: Log the estimated latency to the file after tuning a task.
  
  Parameters
  ----------
  log_file: str
      The log file path.
class_docstr_tok: ["Log","the","estimated","latency","to","the","file","after","tuning","a","task",".","Parameters","--","--","--","--","--","log_file",":","str","The","log","file","path","."]
code: def post_tune(self, task_scheduler, task_id):
      if all(cost < 1e9 for cost in task_scheduler.best_costs):
          total_latency_str = "%.3f" % (task_scheduler.cur_score * 1e3)
      else:
          total_latency_str = "N/A"
  
      with open(self.log_file, "a") as filep:
          filep.write(
              "ElapsedTime(s)\t%.0f\tEstimatedLatency(ms)\t%s\tTrials\t%d\n"
              % (
                  time.time() - task_scheduler.tic,
                  total_latency_str,
                  task_scheduler.ct,
              )
          )
          filep.flush()
  
imports: import os
  import time
  import math
  import logging
  import numpy
  from .search_policy import SearchPolicy, SketchPolicy, PreloadMeasuredStates
  from .cost_model import RandomModel, XGBModel
  from .utils import array_mean
  from .measure import ProgramMeasurer
  from .measure_record import RecordReader
  from .None import _ffi_api
label_desc: Use image node_id 2 for calling the LogEstimatedLatency obj's underlying member method code with example usage: obj.post_tune(task_scheduler, task_id) without return types