o
    bcb                     @   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 1/usr/lib/python3.10/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 )%FixOperatorT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 ur|||S d S r   )_check_method)selfnoderesultsmethodr   r   r   	transform+   s   
zFixOperator.transformzoperator.contains(%s)c                 C      |  ||dS )Ncontains_handle_renamer   r   r   r   r   r   _sequenceIncludes0      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   r   )Nmulr   r   r   r   r   _repeat9   r   zFixOperator._repeatzoperator.imul(%s)c                 C   r   )Nimulr   r   r   r   r   _irepeat=   r   zFixOperator._irepeatz(isinstance(%s, collections.abc.Sequence)c                 C      |  ||ddS )Ncollections.abcSequence_handle_type2abcr   r   r   r   _isSequenceTypeA      zFixOperator._isSequenceTypez'isinstance(%s, collections.abc.Mapping)c                 C   r)   )Nr*   Mappingr,   r   r   r   r   _isMappingTypeE   r/   zFixOperator._isMappingTypezisinstance(%s, numbers.Number)c                 C   r)   )NnumbersNumberr,   r   r   r   r   _isNumberTypeI   r/   zFixOperator._isNumberTypec                 C   s   |d d }||_ |  d S )Nr   r   )value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r-d|v r|S t|d f}|j| }| |d|  d S )N_r   r   r;   r   zYou should use '%s' here.)	getattrr5   r9   collectionsr<   Callablestrr   warning)r   r   r   r   subinvocation_strr   r   r   r   X   s   
zFixOperator._check_methodN)__name__
__module____qualname__BM_compatibleorderr   r   dictPATTERNr   r   r   r$   r&   r(   r.   r1   r4   r   r-   r   r   r   r   r   r      s4    







r   )__doc__collections.abcr@   lib2to3r   lib2to3.fixer_utilr   r   r   r   r   BaseFixr   r   r   r   r   <module>   s    