3
\�
� @ sN d Z ddlZddlmZ ddlmZmZmZmZ dd� Z G dd� dej
�ZdS ) a� Fixer for operator functions.
operator.isCallable(obj) -> hasattr(obj, '__call__')
operator.sequenceIncludes(obj) -> operator.contains(obj)
operator.isSequenceType(obj) -> isinstance(obj, collections.Sequence)
operator.isMappingType(obj) -> isinstance(obj, collections.Mapping)
operator.isNumberType(obj) -> isinstance(obj, numbers.Number)
operator.repeat(obj, n) -> operator.mul(obj, n)
operator.irepeat(obj, n) -> operator.imul(obj, n)
� N)�
fixer_base)�Call�Name�String�touch_importc s � fdd�}|S )Nc s
� | _ | S )N)�
invocation)�f)�s� �2/usr/lib64/python3.6/lib2to3/fixes/fix_operator.py�dec s zinvocation..decr
)r r r
)r r r s r c @ s� e Zd ZdZdZdZdZdeeed� Zdd� Z e
d �d
d� �Ze
d�d
d� �Ze
d�dd� �Z
e
d�dd� �Ze
d�dd� �Ze
d�dd� �Ze
d�dd� �Zdd� Zd d!� Zd"d#� Zd$S )%�FixOperatorTZprez�
method=('isCallable'|'sequenceIncludes'
|'isSequenceType'|'isMappingType'|'isNumberType'
|'repeat'|'irepeat')
z'(' obj=any ')'z�
power< module='operator'
trailer< '.' %(methods)s > trailer< %(obj)s > >
|
power< %(methods)s trailer< %(obj)s > >
)�methods�objc C s" | j ||�}|d k r|||�S d S )N)�
_check_method)�self�node�results�methodr
r
r � transform+ s zFixOperator.transformzoperator.contains(%s)c C s | j ||d�S )N�contains)�_handle_rename)r r r r
r
r �_sequenceIncludes0 s zFixOperator._sequenceIncludeszhasattr(%s, '__call__')c C s2 |d }|j � td�td�g}ttd�||jd�S )Nr z, z
'__call__'�hasattr)�prefix)�cloner r r r )r r r r �argsr
r
r �_isCallable4 s zFixOperator._isCallablezoperator.mul(%s)c C s | j ||d�S )N�mul)r )r r r r
r
r �_repeat: s zFixOperator._repeatzoperator.imul(%s)c C s | j ||d�S )N�imul)r )r r r r
r
r �_irepeat> s zFixOperator._irepeatz$isinstance(%s, collections.Sequence)c C s | j ||dd�S )N�collections�Sequence)�_handle_type2abc)r r r r
r
r �_isSequenceTypeB s zFixOperator._isSequenceTypez#isinstance(%s, collections.Mapping)c C s | j ||dd�S )Nr" �Mapping)r$ )r r r r
r
r �_isMappingTypeF s zFixOperator._isMappingTypezisinstance(%s, numbers.Number)c C s | j ||dd�S )NZnumbers�Number)r$ )r r r r
r
r �
_isNumberTypeJ s zFixOperator._isNumberTypec C s |d d }||_ |j� d S )Nr r )�valueZchanged)r r r �namer r
r
r r N s zFixOperator._handle_renamec C sF t d ||� |d }|j� tddj||g� �g}ttd�||jd�S )Nr z, �.�
isinstance)r )r r r �joinr r r )r r r �module�abcr r r
r
r r$ S s zFixOperator._handle_type2abcc C s\ t | d|d d j �}t|tj�rXd|kr0|S t|d �f}|j| }| j|d| � d S )N�_r r r/ r zYou should use '%s' here.)�getattrr* r- r" �Callable�strr Zwarning)r r r r �subZinvocation_strr
r
r r Y s
zFixOperator._check_methodN)�__name__�
__module__�__qualname__Z
BM_compatible�orderr r �dictZPATTERNr r r r r r! r% r' r) r r$ r r
r
r
r r
s r
)�__doc__r" Zlib2to3r Zlib2to3.fixer_utilr r r r r ZBaseFixr
r
r
r
r �
s