B
    v9ab                 @   sN   d Z ddlZddlmZ ddlmZmZmZm	Z	 dd Z
G dd dejZdS )	a  Fixer for operator functions.

operator.isCallable(obj)       -> callable(obj)
operator.sequenceIncludes(obj) -> operator.contains(obj)
operator.isSequenceType(obj)   -> isinstance(obj, collections.abc.Sequence)
operator.isMappingType(obj)    -> isinstance(obj, collections.abc.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    fdd}|S )Nc                s
    | _ | S )N)
invocation)f)s "/usr/lib/python3.7/fix_operator.pydec   s    zinvocation.<locals>.decr
   )r	   r   r
   )r	   r   r      s    r   c               @   s   e Zd ZdZdZdZdZdeeed Zdd Z	e
d	d
d Ze
ddd Ze
ddd Ze
ddd Ze
ddd Ze
ddd Ze
ddd Zdd Zd d! Zd"d# Zd$S )%FixOperatorTZprez
              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"   |  ||}|d k	r|||S d S )N)_check_method)selfnoderesultsmethodr
   r
   r   	transform+   s    zFixOperator.transformzoperator.contains(%s)c             C   s   |  ||dS )Ncontains)_handle_rename)r   r   r   r
   r
   r   _sequenceIncludes0   s    zFixOperator._sequenceIncludeszcallable(%s)c             C   s"   |d }t td| g|jdS )Nr   callable)prefix)r   r   cloner   )r   r   r   r   r
   r
   r   _isCallable4   s    zFixOperator._isCallablezoperator.mul(%s)c             C   s   |  ||dS )Nmul)r   )r   r   r   r
   r
   r   _repeat9   s    zFixOperator._repeatzoperator.imul(%s)c             C   s   |  ||dS )Nimul)r   )r   r   r   r
   r
   r   _irepeat=   s    zFixOperator._irepeatz(isinstance(%s, collections.abc.Sequence)c             C   s   |  ||ddS )Nzcollections.abcSequence)_handle_type2abc)r   r   r   r
   r
   r   _isSequenceTypeA   s    zFixOperator._isSequenceTypez'isinstance(%s, collections.abc.Mapping)c             C   s   |  ||ddS )Nzcollections.abcMapping)r"   )r   r   r   r
   r
   r   _isMappingTypeE   s    zFixOperator._isMappingTypezisinstance(%s, numbers.Number)c             C   s   |  ||ddS )NZnumbersNumber)r"   )r   r   r   r
   r
   r   _isNumberTypeI   s    zFixOperator._isNumberTypec             C   s   |d d }||_ |  d S )Nr   r   )valueZchanged)r   r   r   namer   r
   r
   r   r   M   s    zFixOperator._handle_renamec             C   sF   t d || |d }| tdd||g g}ttd||jdS )Nr   z, .
isinstance)r   )r   r   r   joinr   r   r   )r   r   r   moduleabcr   argsr
   r
   r   r"   R   s    zFixOperator._handle_type2abcc             C   s^   t | d|d d j }t|tjjrZd|kr2|S t|d f}|j| }| |d|  d S )N_r   r   r-   r   zYou should use '%s' here.)	getattrr(   r+   collectionsr.   Callablestrr   Zwarning)r   r   r   r   subZinvocation_strr
   r
   r   r   X   s    
zFixOperator._check_methodN)__name__
__module____qualname__ZBM_compatibleorderr   r   dictZPATTERNr   r   r   r   r   r    r#   r%   r'   r   r"   r   r
   r
   r
   r   r      s    r   )__doc__Zcollections.abcr2   Zlib2to3r   Zlib2to3.fixer_utilr   r   r   r   r   ZBaseFixr   r
   r
   r
   r   <module>
   s
   