code: def _precompute_absense_costs(
      dictionary, removal_costs, insertion_costs, n, allow_spaces=False
  ):
      """
      Вычисляет минимальную стоимость появления нового символа в узлах словаря
      в соответствии со штрафами из costs
  
      Аргументы:
      ---------------
      dictionary : Trie
          словарь, хранящийся в виде ациклического автомата
  
      removal_costs : dict
          штрафы за удаление символов
  
      insertion_costs : dict
          штрафы за вставку символов
  
      n : int
          глубина ``заглядывания вперёд'' в словаре
  
      Возвращает
      ---------------
      answer : list of dicts, len(answer)=len(dictionary)
          answer[i][a][j] равно минимальному штрафу за появление символа a
          в j-ой позиции в вершине с номером i
      """
      answer = [dict() for node in dictionary.data]
      if n == 0:
          return answer
      curr_alphabet = copy.copy(dictionary.alphabet)
      if allow_spaces:
          curr_alphabet += [" "]
      for l, (costs_in_node, node) in enumerate(
          zip(answer, dictionary.data)
      ):
          # определение минимальной стоимости удаления символов
          curr_node_removal_costs = np.empty(
              dtype=np.float64, shape=(n,)
          )
          if len(node[0]) > 0:
              curr_node_removal_costs[0] = min(
                  removal_costs[symbol] for symbol in node[0]
              )
              for j, symbols in enumerate(node[1:], 1):
                  if len(symbols) == 0:
                      curr_node_removal_costs[
                          j:
                      ] = curr_node_removal_costs[j - 1]
                      break
                  curr_cost = min(
                      removal_costs[symbol] for symbol in symbols
                  )
                  curr_node_removal_costs[j] = min(
                      curr_node_removal_costs[j - 1], curr_cost
                  )
          else:
              curr_node_removal_costs[:] = np.inf
          # определение минимальной стоимости вставки
          for a in curr_alphabet:
              curr_symbol_costs = np.empty(dtype=np.float64, shape=(n,))
              curr_symbol_costs.fill(insertion_costs[a])
              for j, symbols in enumerate(node):
                  if a in symbols:
                      curr_symbol_costs[j:] = 0.0
                      break
                  curr_symbol_costs[j] = min(
                      curr_symbol_costs[j], curr_node_removal_costs[j]
                  )
              costs_in_node[a] = curr_symbol_costs
      return 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 1 for calling a global function with example usage: _precompute_absense_costs(dictionary, removal_costs, insertion_costs, n, allow_spaces) and returns: answer, answer