U
    A`b                     @   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 0/usr/lib/python3.8/lib2to3/fixes/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 r   )_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mulr   r   r   r   r   _repeat9   s    zFixOperator._repeatzoperator.imul(%s)c                 C   s   |  ||dS )Nimulr   r   r   r   r   _irepeat=   s    zFixOperator._irepeatz(isinstance(%s, collections.abc.Sequence)c                 C   s   |  ||ddS )Ncollections.abcSequence_handle_type2abcr   r   r   r   _isSequenceTypeA   s    zFixOperator._isSequenceTypez'isinstance(%s, collections.abc.Mapping)c                 C   s   |  ||ddS )Nr&   Mappingr(   r   r   r   r   _isMappingTypeE   s    zFixOperator._isMappingTypezisinstance(%s, numbers.Number)c                 C   s   |  ||ddS )NZnumbersNumberr(   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, .
isinstancer   )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   r4   r   zYou should use '%s' here.)	getattrr/   r2   collectionsr5   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      s2   







r   )__doc__Zcollections.abcr9   Zlib2to3r   Zlib2to3.fixer_utilr   r   r   r   r   ZBaseFixr   r   r   r   r   <module>   s
   