class_docstr: Класс для поиска близких слов
  в соответствии с расстоянием Левенштейна
class_docstr_tok: ["\u041a\u043b\u0430\u0441\u0441","\u0434\u043b\u044f","\u043f\u043e\u0438\u0441\u043a\u0430","\u0431\u043b\u0438\u0437\u043a\u0438\u0445","\u0441\u043b\u043e\u0432","\u0432","\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438","\u0441","\u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c","\u041b\u0435\u0432\u0435\u043d\u0448\u0442\u0435\u0439\u043d\u0430"]
docstr: Находит все слова в префиксном боре, расстояние до которых
  в соответствии с заданным преобразователем не превышает d
docstr_tok: ["\u041d\u0430\u0445\u043e\u0434\u0438\u0442","\u0432\u0441\u0435","\u0441\u043b\u043e\u0432\u0430","\u0432","\u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043d\u043e\u043c","\u0431\u043e\u0440\u0435",",","\u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435","\u0434\u043e","\u043a\u043e\u0442\u043e\u0440\u044b\u0445","\u0432","\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438","\u0441","\u0437\u0430\u0434\u0430\u043d\u043d\u044b\u043c","\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c","\u043d\u0435","\u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0435\u0442","d"]
code: def _trie_search(
      self,
      word,
      d,
      transducer=None,
      allow_spaces=True,
      return_cost=True,
  ):
      """
      Находит все слова в префиксном боре, расстояние до которых
      в соответствии с заданным преобразователем не превышает d
      """
      if transducer is None:
          # разобраться с пробелами
          transducer = self.transducer.inverse()
      allow_spaces &= self.allow_spaces
      trie = self.dictionary
      #  инициализация переменных
      used_agenda_keys = set()
      agenda = SortedListWithKey(key=(lambda x: x[1]))
      h = self.h_func(word, trie.root)
      # agenda[self.agenda_key("", 0, trie.root)] = (0.0, 0.0, h)
      key, value = ("", 0, trie.root), (0.0, 0.0, h)
      agenda.add((key, value))
      answer = dict()
      k = 0
      # очередь с приоритетом с промежуточными результатами
      while len(agenda) > 0:
          key, value = agenda.pop(0)
          if key in used_agenda_keys:
              continue
          used_agenda_keys.add(key)
          low, pos, index = key
          cost, g, h = value
          # g --- текущая стоимость, h --- нижняя оценка будущей стоимости
          # cost = g + h --- нижняя оценка суммарной стоимости
          k += 1
          max_upperside_length = min(
              len(word) - pos, transducer.max_up_length
          )
          for upperside_length in range(max_upperside_length + 1):
              new_pos = pos + upperside_length
              curr_up = word[pos:new_pos]
              if curr_up not in transducer.operation_costs:
                  continue
              for curr_low, curr_cost in transducer.operation_costs[
                  curr_up
              ].items():
                  new_g = g + curr_cost
                  if new_g > d:  # если g > d, то h можно не вычислять
                      continue
                  if curr_low == " ":
                      if allow_spaces and trie.is_final(index):
                          new_index = trie.root
                      else:
                          new_index = Trie.NO_NODE
                  else:
                      new_index = trie.descend(index, curr_low)
                  if new_index is Trie.NO_NODE:
                      continue
                  new_low = low + curr_low
                  new_h = self.h_func(word[new_pos:], new_index)
                  new_cost = new_g + new_h
                  if new_cost > d:
                      continue
                  new_key = (new_low, new_pos, new_index)
                  new_value = (new_cost, new_g, new_h)
                  if new_pos == len(word) and trie.is_final(new_index):
                      old_g = answer.get(new_low, None)
                      if old_g is None or new_g < old_g:
                          answer[new_low] = new_g
                  agenda.add((new_key, new_value))
      answer = sorted(answer.items(), key=(lambda x: x[1]))
      if return_cost:
          return answer
      else:
          return [elem[0] for elem in answer]
  
imports: import copy
  import itertools
  import numpy
  from sortedcontainers import SortedListWithKey
  from .tabled_trie import Trie, make_trie
label_desc: Use image node_id 4 for calling the LevenshteinSearcher obj's underlying member method code with example usage: obj._trie_search(word, d, transducer, allow_spaces, return_cost) and returns: answer, unknown