input: Write a function to perform fuzzy search on a list of strings, returning all strings from the list that are within a specified Levenshtein distance from a given query string. The function should convert both the query and the list of choices to lower case before calculating the distance.
  def find_matches(query, choices, threshold):
      # Convert query and choices to lower case
      query, choices = query.lower(), [choice.lower() for choice in choices]
      # Initialize empty list to store matches
      matches = []
      
      # Loop through each choice
      for choice in choices:
          # Calculate Levenshtein distance between query and choice
          distance = levenshtein_distance(query, choice)
          # If distance is less than threshold, append choice to matches
          if distance <= threshold:
              matches.append(choice)
      
      return matches
  
  assert find_matches("apple", ["appel", "banana", "aple", "pineapple"], 2) == ["appel", "aple"]
  assert find_matches("kitten", ["sitting", "kitted", "kitten"], 3) == ["sitting", "kitten"]
  assert find_matches("flaw", ["lawn"], 3) == ["lawn"]
  assert find_matches("", ["", "a", "b"], 0) == [""]
  assert find_matches("test", [], 1) == []
output: def find_matches(query, choices, threshold):
      query, choices = query.lower(), [choice.lower() for choice in choices]
      matches = []
      for choice in choices:
          distance = levenshtein_distance(query, choice)
          if distance <= threshold:
              matches.append(choice)
      return matches