class_docstr: Reader of the json log file.
  
  Parameters
  ----------
  filename : str
      File name for this reader to load log from.
class_docstr_tok: ["Reader","of","the","json","log","file",".","Parameters","--","--","--","--","--","filename",":","str","File","name","for","this","reader","to","load","log","from","."]
docstr: Read multiple lines from the log file.
  
  Parameters
  ----------
  max_lines : Optional[int]
      The maximum number of lines. None to read all lines.
  skip_lines : int = 0
      Skip the first n lines.
  
  Returns
  -------
  inputs : List[auto_scheduler.measure.MeasureInput]
      The MeasureInputs loaded from the log file.
  results : List[auto_scheduler.measure.MeasureResult]
      The MeasureResults loaded from the log file.
  
  Notes
  -----
  Some unimportant and expensive fields in the returned MeasureInput are not deserialized
  for faster read speed (e.g. input.task.compute_dag, input.state.stages).
  If you want to use them, you can call the :code:`recover_measure_input` below
  to rebuild these fields.
docstr_tok: ["Read","multiple","lines","from","the","log","file",".","Parameters","--","--","--","--","--","max_lines",":","Optional","[","int","]","The","maximum","number","of","lines",".","None","to","read","all","lines",".","skip_lines",":","int","=","0","Skip","the","first","n","lines",".","Returns","--","--","--","-","inputs",":","List","[","auto_scheduler.measure.MeasureInput","]","The","MeasureInputs","loaded","from","the","log","file",".","results",":","List","[","auto_scheduler.measure.MeasureResult","]","The","MeasureResults","loaded","from","the","log","file",".","Notes","--","--","-","Some","unimportant","and","expensive","fields","in","the","returned","MeasureInput","are","not","deserialized","for","faster","read","speed","(","e.g",".","input.task.compute_dag",",","input.state.stages",")",".","If","you","want","to","use","them",",","you","can","call","the",":","code",":","`","recover_measure_input","`","below","to","rebuild","these","fields","."]
code: def read_lines(self, max_lines=None, skip_lines=0):
      """Read multiple lines from the log file.
  
      Parameters
      ----------
      max_lines : Optional[int]
          The maximum number of lines. None to read all lines.
      skip_lines : int = 0
          Skip the first n lines.
  
      Returns
      -------
      inputs : List[auto_scheduler.measure.MeasureInput]
          The MeasureInputs loaded from the log file.
      results : List[auto_scheduler.measure.MeasureResult]
          The MeasureResults loaded from the log file.
  
      Notes
      -----
      Some unimportant and expensive fields in the returned MeasureInput are not deserialized
      for faster read speed (e.g. input.task.compute_dag, input.state.stages).
      If you want to use them, you can call the :code:`recover_measure_input` below
      to rebuild these fields.
      """
      inputs, results = _ffi_api.RecordReaderReadLines(
          self, max_lines if max_lines else -1, skip_lines
      )
      self.check_workload_key(inputs)
      return inputs, results
  
imports: import argparse
  import logging
  import os
  import itertools
  import numpy
  import tvm._ffi
  from tvm.runtime import Object
  from .measure import MeasureErrorNo, MeasureCallback
  from .utils import calc_workload_dis_factor, decode_workload_key
  from .None import _ffi_api
label_desc: Use image node_id 3 for calling the RecordReader obj's underlying member method code with example usage: obj.read_lines(max_lines, skip_lines) and returns: inputs,  results