code: def parse_commit_message(message: str) -> ParsedCommit:
      """
      Parse a scipy-style commit message
  
      :param message: A string of a commit message.
      :return: A tuple of (level to bump, type of change, scope of change, a tuple
      with descriptions)
      :raises UnknownCommitMessageStyleError: if regular expression matching fails
      """
  
      parsed = re_parser.match(message)
      if not parsed:
          raise UnknownCommitMessageStyleError(
              f"Unable to parse the given commit message: {message}"
          )
  
      if parsed.group("subject"):
          subject = parsed.group("subject")
      else:
          raise UnknownCommitMessageStyleError(
              f"The commit has no subject {message}"
          )
  
      if parsed.group("text"):
          blocks = parsed.group("text").split("\n\n")
          blocks = [x for x in blocks if not x == ""]
          blocks.insert(0, subject)
      else:
          blocks = [subject]
  
      msg_type: ChangeType
      for msg_type in COMMIT_TYPES:
          if msg_type.tag == parsed.group("tag"):
              break
      else:
          # some commits may not have a tag, e.g. if they belong to a PR that
          # wasn't squashed (for maintainability) ignore them
          msg_type = Ignore("", "None")
  
      # Look for descriptions of breaking changes
      migration_instructions = [
          block
          for block in blocks
          if block.startswith("BREAKING CHANGE")
      ]
      if migration_instructions:
          msg_type.make_breaking()
  
      return ParsedCommit(
          msg_type.bump_level,
          msg_type.section,
          parsed.group("scope"),
          blocks,
          migration_instructions,
      )
  
imports: import logging
  import re
  from semantic_release import UnknownCommitMessageStyleError
  from semantic_release.helpers import LoggedFunction
  from semantic_release.history.parser_helpers import ParsedCommit
label_desc: Use image node_id 1 for calling a global function with example usage: parse_commit_message(message) and returns: ParsedCommit