1# Copyright 2008 Armin Ronacher.
2# Licensed to PSF under a Contributor Agreement.
3
4"""Fixer for reduce().
5
6Makes sure reduce() is imported from the functools module if reduce is
7used in that module.
8"""
9
10from lib2to3 import fixer_base
11from lib2to3.fixer_util import touch_import
12
13
14
15class FixReduce(fixer_base.BaseFix):
16
17    BM_compatible = True
18    order = "pre"
19
20    PATTERN = """
21    power< 'reduce'
22        trailer< '('
23            arglist< (
24                (not(argument<any '=' any>) any ','
25                 not(argument<any '=' any>) any) |
26                (not(argument<any '=' any>) any ','
27                 not(argument<any '=' any>) any ','
28                 not(argument<any '=' any>) any)
29            ) >
30        ')' >
31    >
32    """
33
34    def transform(self, node, results):
35        touch_import('functools', 'reduce', node)
36