15e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis""" Fixer for itertools.(imap|ifilter|izip) --> (map|filter|zip) and 25e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis itertools.ifilterfalse --> itertools.filterfalse (bugs 2360-2363) 35e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 4baf267ceaeb7d4d1e15228018c450a9f738fcf3eMartin v. Löwis imports from itertools are fixed in fix_itertools_import.py 5baf267ceaeb7d4d1e15228018c450a9f738fcf3eMartin v. Löwis 65e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis If itertools is imported as something else (ie: import itertools as it; 75e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis it.izip(spam, eggs)) method calls will not get fixed. 85e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis """ 95e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 105e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis# Local imports 11e607823af57c176c3be23985f5bbf9260f6bd836Benjamin Petersonfrom .. import fixer_base 12e607823af57c176c3be23985f5bbf9260f6bd836Benjamin Petersonfrom ..fixer_util import Name 135e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 14e607823af57c176c3be23985f5bbf9260f6bd836Benjamin Petersonclass FixItertools(fixer_base.BaseFix): 15a81eae1fd71eed670d1c28bf940ea99b4bfa2335Benjamin Peterson BM_compatible = True 161af19d1ffd960ed5b5876d7aa8d2dcba0117edbfBenjamin Peterson it_funcs = "('imap'|'ifilter'|'izip'|'izip_longest'|'ifilterfalse')" 175e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis PATTERN = """ 185e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis power< it='itertools' 195e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis trailer< 205e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis dot='.' func=%(it_funcs)s > trailer< '(' [any] ')' > > 215e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis | 225e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis power< func=%(it_funcs)s trailer< '(' [any] ')' > > 235e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis """ %(locals()) 245e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 25baf267ceaeb7d4d1e15228018c450a9f738fcf3eMartin v. Löwis # Needs to be run after fix_(map|zip|filter) 26baf267ceaeb7d4d1e15228018c450a9f738fcf3eMartin v. Löwis run_order = 6 27baf267ceaeb7d4d1e15228018c450a9f738fcf3eMartin v. Löwis 285e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis def transform(self, node, results): 295e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis prefix = None 305e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis func = results['func'][0] 311af19d1ffd960ed5b5876d7aa8d2dcba0117edbfBenjamin Peterson if ('it' in results and 321af19d1ffd960ed5b5876d7aa8d2dcba0117edbfBenjamin Peterson func.value not in (u'ifilterfalse', u'izip_longest')): 335e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis dot, it = (results['dot'], results['it']) 345e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis # Remove the 'itertools' 356118040b7aee905bcddcb949c6815dc19ca23070Benjamin Peterson prefix = it.prefix 365e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis it.remove() 375dd99ebbc25ac0e182cb00ac4c67aef8d32a6755Ezio Melotti # Replace the node which contains ('.', 'function') with the 385dd99ebbc25ac0e182cb00ac4c67aef8d32a6755Ezio Melotti # function (to be consistent with the second part of the pattern) 395e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis dot.remove() 405e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis func.parent.replace(func) 415e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis 426118040b7aee905bcddcb949c6815dc19ca23070Benjamin Peterson prefix = prefix or func.prefix 435e37baea8007cb64b65a180e4d6c80de292a8a4aMartin v. Löwis func.replace(Name(func.value[1:], prefix=prefix)) 44