code: def _all_number_groups_are_exactly_present(numobj, normalized_candidate, formatted_number_groups):
      
      candidate_groups = re.split(NON_DIGITS_PATTERN, normalized_candidate)
      # Set this to the last group, skipping it if the number has an extension.
      if numobj.extension is not None:
          candidate_number_group_index = len(candidate_groups) - 2
      else:
          candidate_number_group_index = len(candidate_groups) - 1
      # First we check if the national significant number is formatted as a
      # block.  We use contains and not equals, since the national significant
      # number may be present with a prefix such as a national number prefix, or
      # the country code itself.
      if (len(candidate_groups) == 1 or
          candidate_groups[candidate_number_group_index].find(national_significant_number(numobj)) != -1):
          return True
      # Starting from the end, go through in reverse, excluding the first group,
      # and check the candidate and number groups are the same.
      formatted_number_group_index = len(formatted_number_groups) - 1
      while (formatted_number_group_index > 0 and candidate_number_group_index >= 0):
          if (candidate_groups[candidate_number_group_index] !=
              formatted_number_groups[formatted_number_group_index]):
              return False
          formatted_number_group_index -= 1
          candidate_number_group_index -= 1
      # Now check the first group. There may be a national prefix at the start, so we only check
      # that the candidate group ends with the formatted number group.
      return (candidate_number_group_index >= 0 and
              candidate_groups[candidate_number_group_index].endswith(formatted_number_groups[0]))
docs: Returns True if the groups of digits found in our candidate phone number match our
      expectations.
  
      Arguments:
      numobj -- the original number we found when parsing
      normalized_candidate -- the candidate number, normalized to only contain ASCII digits,
            but with non-digits (spaces etc) retained
      expected_number_groups -- the groups of digits that we would expect to see if we
            formatted this number
      Returns True if expectations matched.