docs: def aliases_categories(chr):
      """Retrieves the script block alias and unicode category for a unicode character.
  
      >>> categories.aliases_categories('A')
      ('LATIN', 'L')
      >>> categories.aliases_categories('τ')
      ('GREEK', 'L')
      >>> categories.aliases_categories('-')
      ('COMMON', 'Pd')
  
      :param chr: A unicode character
      :type chr: str
      :return: The script block alias and unicode category for a unicode character.
      :rtype: (str, str)
      """
      l = 0
      r = len(categories_data['code_points_ranges']) - 1
      c = ord(chr)
  
      # binary search
      while r >= l:
          m = (l + r) // 2
          if c < categories_data['code_points_ranges'][m][0]:
              r = m - 1
          elif c > categories_data['code_points_ranges'][m][1]:
              l = m + 1
          else:
              return (
                  categories_data['iso_15924_aliases'][categories_data['code_points_ranges'][m][2]],
                  categories_data['categories'][categories_data['code_points_ranges'][m][3]])
      return 'Unknown', 'Zzzz'