input: Write a function to implement a fuzzy search algorithm in Python that can match strings with near similarities using the Levenshtein distance. The function should take a query string, a list of choices, and a threshold for the Levenshtein distance. It should return a list of choices that match the query string with a distance less than or equal to the specified threshold. If the list of choices is empty, the function should return an empty list.
  
  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
  
  
  assert find_matches("apple", ["apples", "appel", "aple", "banana"], 2)==["apples", "appel", "aple"]
  assert find_matches("banana", ["banana", "banna", "apple", "nana"], 1)==["banana", "banna", "nana"]
  assert find_matches("grape", ["grape", "grp", "graaaape"], 3)==["grape", "grp", "graaaape"]
  assert find_matches("strawberry", [], 2)==[]
  assert find_matches("", ["apple", "banana", "cherry"], 0)==[]
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