
\[\                 @   sm   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	 Gd d   d e j
  Z d S)	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     f d d   } | S)Nc                s     |  _  |  S)N)
invocation)f)s 0/usr/lib/python3.4/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 d e d e  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/   |  j  | |  } | d  k	 r+ | | |  Sd  S)N)_check_method)selfnoderesultsmethodr
   r
   r   	transform+   s    zFixOperator.transformzoperator.contains(%s)c             C   s   |  j  | | d  S)Ncontains)_handle_rename)r   r   r   r
   r
   r   _sequenceIncludes0   s    zFixOperator._sequenceIncludeszhasattr(%s, '__call__')c             C   sG   | d } | j    t d  t d  g } t t d  | d | j S)Nr   z, z
'__call__'hasattrprefix)cloner   r   r   r   )r   r   r   r   argsr
   r
   r   _isCallable4   s    
!zFixOperator._isCallablezoperator.mul(%s)c             C   s   |  j  | | d  S)Nmul)r   )r   r   r   r
   r
   r   _repeat:   s    zFixOperator._repeatzoperator.imul(%s)c             C   s   |  j  | | d  S)Nimul)r   )r   r   r   r
   r
   r   _irepeat>   s    zFixOperator._irepeatz$isinstance(%s, collections.Sequence)c             C   s   |  j  | | d d  S)NcollectionsSequence)_handle_type2abc)r   r   r   r
   r
   r   _isSequenceTypeB   s    zFixOperator._isSequenceTypez#isinstance(%s, collections.Mapping)c             C   s   |  j  | | d d  S)Nr"   Mapping)r$   )r   r   r   r
   r
   r   _isMappingTypeF   s    zFixOperator._isMappingTypezisinstance(%s, numbers.Number)c             C   s   |  j  | | d d  S)NZnumbersNumber)r$   )r   r   r   r
   r
   r   _isNumberTypeJ   s    zFixOperator._isNumberTypec             C   s%   | d d } | | _  | j   d  S)Nr   r   )valueZchanged)r   r   r   namer   r
   r
   r   r   N   s    	zFixOperator._handle_renamec             C   sa   t  d  | |  | d } | j   t d d j | | g   g } t t d  | d | j S)Nr   z, .
isinstancer   )r   r   r   joinr   r   r   )r   r   r   moduleabcr   r   r
   r
   r   r$   S   s    
+zFixOperator._handle_type2abcc             C   s{   t  |  d | d d j  } t | t j  rw d | k r@ | St | d  f } | j | } |  j | d |  n  d  S)N_r   r   r/   r   zYou should use '%s' here.)getattrr*   r-   r"   Callablestrr   Zwarning)r   r   r   r   subZinvocation_strr
   r
   r   r   Y   s    zFixOperator._check_methodN)__name__
__module____qualname__ZBM_compatibleZorderr   r   dictZPATTERNr   r   r   r   r   r!   r%   r'   r)   r   r$   r   r
   r
   r
   r   r      s    r   )__doc__r"   Zlib2to3r   Zlib2to3.fixer_utilr   r   r   r   r   ZBaseFixr   r
   r
   r
   r   <module>
   s
   "