input: Write a function to find potential matches in a list of strings based on a fuzzy search query and a specified similarity threshold. The function should use the Levenshtein distance to determine the similarity between the query and each choice. Return a list of strings that are within the similarity threshold.
  
  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", ["Apple", "appla", "pineapple", "maple"], 2) == ["apple", "appla"]
  assert find_matches("cat", ["cut", "bat", "mat", "catastrophe"], 1) == ["cut"]
  assert find_matches("python", ["Pyhton", "typhon", "polite"], 2) == ["pyhton"]
  assert find_matches("book", ["boot", "brook", "boom", "back"], 3) == ["boot", "brook", "boom"]
  assert find_matches("hello", [], 1) == []
output: def find_matches(query, choices, threshold):
      query = query.lower()
      choices = [choice.lower() for choice in choices]
      matches = []
      
      for choice in choices:
          distance = levenshtein_distance(query, choice)
          if distance <= threshold:
              matches.append(choice)
      
      return matches