B � f* �@sRdZddlmZddlmZddlmZddlmZmZm Z Gdd�dej �Z dS) zIFixer for apply(). This converts apply(func, v, k) into (func)(*v, **k).�)�pytree)�token)� fixer_base)�Call�Comma� parenthesizec@seZdZdZdZdd�ZdS)�FixApplyTa. power< 'apply' trailer< '(' arglist< (not argument ')' > > c Cs4|j}|st�|d}|d}|�d�}|rN|j|jjkrN|jdjdkrNdS|rt|j|jjkrt|jdjdkrtdS|j}|��}|jt j |j fkr�|j|j ks�|jdjt j kr�t|�}d|_|��}d|_|dk r�|��}d|_t�t jd �|g}|dk �r&|�t�t�t j d�|g�d |d_t|||d �S) N�func�args�kwds�>�**�*z**������r� )�prefix)�syms�AssertionError�get�typeZargumentZchildren�valuerZcloner�NAMEZatomZpower� DOUBLESTARrrZLeaf�STAR�extendrr) �selfZnodeZresultsrr r r rZ l_newargs�r�     zFixApply.transformN)�__name__� __module__� __qualname__Z BM_compatibleZPATTERNrrrrrrsrN) �__doc__rrZpgen2rrZ fixer_utilrrrZBaseFixrrrrr�s