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
  ```
code: def __init__(
      self,
      template_record,
      class_map: Optional[ClassMap] = None,
      idmap: Optional[IDMap] = None,
  ):
      # self.class_map = class_map or ClassMap()
      # if class_map is None:
      #     self.class_map.unlock()
      self.template_record = template_record
      self.idmap = idmap or IDMap()
  
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 1 to create a new Parser object from inherited base classes: ParserInterface, ABC with example: obj = Parser(template_record, class_map, idmap)