def lower_transductions(self, word, max_cost, return_cost=True):
prefixes = [[] for i in range(len(word) + <NUM_LIT:1>)]<EOL>prefixes[<NUM_LIT:0>].append(((), <NUM_LIT:0.0>))<EOL>for pos in range(len(prefixes)):<EOL><INDENT>prefixes[pos] = self._perform_insertions(prefixes[pos], max_cost)<EOL>max_upperside_length = min(len(word) - pos, self.max_up_length)<EOL>for upperside_length in range(<NUM_LIT:1>, max_upperside_length + <NUM_LIT:1>):<EOL><INDENT>up = word[pos: pos + upperside_length]<EOL>for low, low_cost in self.operation_costs.get(up, dict()).items():<EOL><INDENT>for transduction, cost in prefixes[pos]:<EOL><INDENT>new_cost = cost + low_cost<EOL>if new_cost <= max_cost:<EOL><INDENT>new_transduction = transduction +(up, low)<EOL>prefixes[pos + upperside_length].append((new_transduction, new_cost))<EOL><DEDENT><DEDENT><DEDENT><DEDENT><DEDENT>answer = sorted(prefixes[-<NUM_LIT:1>], key=(lambda x: x[<NUM_LIT:0>]))<EOL>if return_cost:<EOL><INDENT>return answer<EOL><DEDENT>else:<EOL><INDENT>return [elem[<NUM_LIT:0>] for elem in answer]<EOL><DEDENT>
Возвращает все трансдукции с верхним элементом word,
    чья стоимость не превышает max_cost

`   Возвращает:
    ----------
    result : list
        список вида [(трансдукция, стоимость)], если return_cost=True
        список трансдукций, если return_cost=False
        список отсортирован в порядке возрастания стоимости трансдукции