code: def _get_block_result(chars_a, chars_b):
      
      logger.debug('_get_block_result(%s, %s)', chars_a, chars_b)
      first_is_digit = chars_a[0].isdigit()
      pop_func = _pop_digits if first_is_digit else _pop_letters
      return_if_no_b = a_newer if first_is_digit else b_newer
      block_a, block_b = pop_func(chars_a), pop_func(chars_b)
      if len(block_b) == 0:
          logger.debug('blocks are equal')
          return return_if_no_b
      return _compare_blocks(block_a, block_b)
docs: Get the first block from two character lists and compare
  
      If character list ``a`` begins with a digit, the :any:`_pop_digit`
      function is called on both lists to get blocks of all consecutive
      digits at the start of each list. If the length of the block
      returned when popping digits for ``b`` is zero (``b`` started with a
      letter), ``a`` is newer. If ``b`` is of nonzero length, the blocks
      are compared using :any:`_compare_blocks`.
  
      If character list ``a`` begins with a letter, the
      :any:`_pop_letter` function is called on both lists to get blocks
      of all consecutive letters at the start of each list. If the length
      of the block returned when popping letters for ``b`` is zero (``b``
      started with a digit), ``b`` is newer. If ``b`` is of nonzero
      length, blocks ``a`` and ``b`` are compared using
      :any:`_compare_blocks`.
  
      :param list chars_a: a list of characters derived from a version
          string
      :param list chars_b: a list of characters derived from a version
          string
      :return: 1 (if ``a`` is newer), 0 (if versions are equal), or
          -1 (if ``b`` is newer)
      :rtype: int