code: def _number_type_helper(national_number, metadata):
      
      if not _is_number_matching_desc(national_number, metadata.general_desc):
          return PhoneNumberType.UNKNOWN
      if _is_number_matching_desc(national_number, metadata.premium_rate):
          return PhoneNumberType.PREMIUM_RATE
      if _is_number_matching_desc(national_number, metadata.toll_free):
          return PhoneNumberType.TOLL_FREE
      if _is_number_matching_desc(national_number, metadata.shared_cost):
          return PhoneNumberType.SHARED_COST
      if _is_number_matching_desc(national_number, metadata.voip):
          return PhoneNumberType.VOIP
      if _is_number_matching_desc(national_number, metadata.personal_number):
          return PhoneNumberType.PERSONAL_NUMBER
      if _is_number_matching_desc(national_number, metadata.pager):
          return PhoneNumberType.PAGER
      if _is_number_matching_desc(national_number, metadata.uan):
          return PhoneNumberType.UAN
      if _is_number_matching_desc(national_number, metadata.voicemail):
          return PhoneNumberType.VOICEMAIL
  
      if _is_number_matching_desc(national_number, metadata.fixed_line):
          if metadata.same_mobile_and_fixed_line_pattern:
              return PhoneNumberType.FIXED_LINE_OR_MOBILE
          elif _is_number_matching_desc(national_number, metadata.mobile):
              return PhoneNumberType.FIXED_LINE_OR_MOBILE
          return PhoneNumberType.FIXED_LINE
  
      # Otherwise, test to see if the number is mobile. Only do this if certain
      # that the patterns for mobile and fixed line aren't the same.
      if (not metadata.same_mobile_and_fixed_line_pattern and
          _is_number_matching_desc(national_number, metadata.mobile)):
          return PhoneNumberType.MOBILE
      return PhoneNumberType.UNKNOWN
docs: Return the type of the given number against the metadata