input: Write a function to implement a fuzzy search algorithm in Python that can match strings with near similarities based on a given threshold using Levenshtein distance. The function should take a query string, a list of choice strings, and an integer threshold as inputs, and return a list of matching strings from the choices that have a distance less than or equal to the threshold. If no matches are found, 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", "pineapple", "banana", "grape"], 2) == ["apples", "pineapple"]
  assert find_matches("kitten", ["sitting", "kitchen", "kite"], 3) == ["sitting"]
  assert find_matches("hello", ["world", "help", "hello"], 0) == ["hello"]
  assert find_matches("python", ["java", "cpp", "javascript"], 2) == []
  assert find_matches("", ["empty", "none", "null"], 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