nodes: 0, module; 1, function_definition; 2, function_name:natural_sort; 3, parameters; 4, type; 5, block; 6, typed_parameter; 7, generic_type; 8, expression_statement; 9, return_statement; 10, identifier:list_to_sort; 11, type; 12, identifier:List; 13, type_parameter; 14, comment:"""
      Sorts a list of strings case insensitively as well as numerically.
  
      For example: ['a1', 'A2', 'a3', 'A11', 'a22']
  
      To sort a list in place, don't call this method, which makes a copy. Instead, do this:
  
      my_list.sort(key=natural_keys)
  
      :param list_to_sort: the list being sorted
      :return: the list sorted naturally
      """; 15, call; 16, generic_type; 17, type; 18, identifier:sorted; 19, argument_list; 20, identifier:Iterable; 21, type_parameter; 22, identifier:str; 23, identifier:list_to_sort; 24, keyword_argument; 25, type; 26, identifier:key; 27, identifier:natural_keys; 28, identifier:str
code: def natural_sort(list_to_sort: Iterable[str]) -> List[str]:
      """
      Sorts a list of strings case insensitively as well as numerically.
  
      For example: ['a1', 'A2', 'a3', 'A11', 'a22']
  
      To sort a list in place, don't call this method, which makes a copy. Instead, do this:
  
      my_list.sort(key=natural_keys)
  
      :param list_to_sort: the list being sorted
      :return: the list sorted naturally
      """
      return sorted(list_to_sort, key=natural_keys)