docs: def parse(self, stream, parser=None):
          """Parse the given file using available `BaseParser` instances.
  
          Raises:
              TypeError: when the parser argument is not a string or None.
              ValueError: when the parser argument is a string that does
                  not name a `BaseParser`.
  
          """
          force, parsers = self._get_parsers(parser)
  
          try:
              stream.seek(0)
              lookup = stream.read(1024)
              stream.seek(0)
          except (io.UnsupportedOperation, AttributeError):
              lookup = None
  
          for p in parsers:
              if p.hook(path=self.path, force=force, lookup=lookup):
                  self.meta, self.terms, self.imports, self.typedefs = p.parse(stream)
                  self._parsed_by = p.__name__
                  break