class_docstr: Base class for all parsers, implements the main parsing logic.
  
  The actual fields to be parsed are defined by the mixins used when
  defining a custom parser. The only required fields for all parsers
  are `image_id` and `image_width_height`.
  
  # Arguments
      idmap: Maps from filenames to unique ids, pass an `IDMap()` if you need this information.
  
  # Examples
  
  Create a parser for image filepaths.
  ```python
  class FilepathParser(Parser, FilepathParserMixin):
      # implement required abstract methods
  ```
docstr: Loops through all data points parsing the required fields.
  
  # Arguments
      data_splitter: How to split the parsed data, defaults to a [0.8, 0.2] random split.
      show_pbar: Whether or not to show a progress bar while parsing the data.
      cache_filepath: Path to save records in pickle format. Defaults to None, e.g.
                      if the user does not specify a path, no saving nor loading happens.
  
  # Returns
      A list of records for each split defined by `data_splitter`.
docstr_tok: ["Loops","through","all","data","points","parsing","the","required","fields",".","#","Arguments","data_splitter",":","How","to","split","the","parsed","data",",","defaults","to","a","[","0.8",",","0.2","]","random","split",".","show_pbar",":","Whether","or","not","to","show","a","progress","bar","while","parsing","the","data",".","cache_filepath",":","Path","to","save","records","in","pickle","format",".","Defaults","to","None",",","e.g",".","if","the","user","does","not","specify","a","path",",","no","saving","nor","loading","happens",".","#","Returns","A","list","of","records","for","each","split","defined","by","`","data_splitter","`","."]
code: def parse(
      self,
      data_splitter: DataSplitter = None,
      autofix: bool = True,
      show_pbar: bool = True,
      cache_filepath: Union[str, Path] = None,
  ) -> List[List[BaseRecord]]:
      """Loops through all data points parsing the required fields.
  
      # Arguments
          data_splitter: How to split the parsed data, defaults to a [0.8, 0.2] random split.
          show_pbar: Whether or not to show a progress bar while parsing the data.
          cache_filepath: Path to save records in pickle format. Defaults to None, e.g.
                          if the user does not specify a path, no saving nor loading happens.
  
      # Returns
          A list of records for each split defined by `data_splitter`.
      """
      if self._check_path(cache_filepath):
          logger.info(
              f"Loading cached records from {cache_filepath}",
          )
          return pickle.load(open(Path(cache_filepath), "rb"))
      else:
          data_splitter = data_splitter or RandomSplitter([0.8, 0.2])
          records = self.parse_dicted(show_pbar=show_pbar)
  
          if autofix:
              logger.opt(colors=True).info(
                  "<blue><bold>Autofixing records</></>"
              )
              records = records.autofix()
  
          records = records.make_splits(data_splitter)
  
          # self.class_map.lock()
          if cache_filepath is not None:
              pickle.dump(records, open(Path(cache_filepath), "wb"))
  
          return records
  
imports: from icevision.imports import *
  from icevision.utils import *
  from icevision.utils.code_template import *
  from icevision.core import *
  from icevision.data import *
label_desc: Use image node_id 8 for calling the Parser obj's underlying member method code with example usage: obj.parse(data_splitter, autofix, show_pbar, cache_filepath) and returns: pickle, records