
    c:                        d Z ddlmZ ddlmZ ddlZddlmZmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZmZmZmZmZmZ dd
lmZ dZ	 dddZ G d de          ZdS )z5Special methods checker and helper function's module.    )annotations)CallableN)basesnodes)InferenceContext)InferenceResult)BaseChecker)	PYMETHODSSPECIAL_METHODS_PARAMSdecorated_withis_function_body_ellipsisonly_required_for_messages
safe_infer)PyLinter__next__nodenodes.FunctionDefcallercontextInferenceContext | NonereturnInferenceResult | Nonec                    	 |                      ||          }t          |          }n"# t          j        $ r Y dS t          $ r Y dS w xY w	 t          |           dS # t          j        $ r Y dS t          $ r |cY S w xY w)zSafely infer the return value of a function.

    Returns None if inference failed or if there is some ambiguity (more than
    one node has been inferred). Otherwise, returns inferred value.
    )r   N)infer_call_resultnextastroidInferenceErrorStopIteration)r   r   r   inferitvalues        Olib/python3.11/site-packages/pylint/checkers/classes/special_methods_checker.py_safe_infer_call_resultr"      s    (((AAW!   tt   ttWt!   tt   s,   &) A	AAA A=/A=<A=c                      e Zd ZdZdZddde dddd	gifd
ddddgifddddddddddddZdG fdZ edddd d!d"d#d$d%d&d'd(d)          dHd,            Z	e	Z
dHd-ZedId2            ZedJd3            ZedJd4            ZedJd5            ZedJd6            ZedJd7            ZedJd8            ZedJd9            ZdKd;ZdKd<ZdKd=ZdKd>ZdKd?ZdKd@ZdKdAZdKdBZdKdCZdKdDZdKdEZdKdFZ  xZ!S )LSpecialMethodsCheckerzOChecker which verifies that special methods
    are implemented correctly.
    classesz__iter__ returns non-iteratornon-iterator-returnedzVUsed when an __iter__ method returns something which is not an iterable (i.e. has no `z	` method)	old_names)W0234zold-non-iterator-returned-1)E0234zold-non-iterator-returned-2z6The special method %r expects %s param(s), %d %s given#unexpected-special-method-signaturezEmitted when a special method was defined with an invalid number of parameters. If it has too few or too many, it might not work at all.)E0235zbad-context-manager)z,__len__ does not return non-negative integerinvalid-length-returnedzPUsed when a __len__ method returns something which is not a non-negative integer)z__bool__ does not return boolinvalid-bool-returnedzAUsed when a __bool__ method returns something which is not a bool)z__index__ does not return intinvalid-index-returnedzGUsed when an __index__ method returns something which is not an integer)z__repr__ does not return strinvalid-repr-returnedzCUsed when a __repr__ method returns something which is not a string)z__str__ does not return strinvalid-str-returnedzBUsed when a __str__ method returns something which is not a string)z__bytes__ does not return bytesinvalid-bytes-returnedzAUsed when a __bytes__ method returns something which is not bytes)z__hash__ does not return intinvalid-hash-returnedzEUsed when a __hash__ method returns something which is not an integer)z4__length_hint__ does not return non-negative integerinvalid-length-hint-returnedzXUsed when a __length_hint__ method returns something which is not a non-negative integer)z__format__ does not return strinvalid-format-returnedzEUsed when a __format__ method returns something which is not a string)z&__getnewargs__ does not return a tupleinvalid-getnewargs-returnedzHUsed when a __getnewargs__ method returns something which is not a tuple)zB__getnewargs_ex__ does not return a tuple containing (tuple, dict)invalid-getnewargs-ex-returnedzbUsed when a __getnewargs_ex__ method returns something which is not of the form tuple(tuple, dict))E0301E0302E0303E0304E0305E0306E0307E0308E0309E0310E0311E0312E0313linterr   r   Nonec                    t                                          |           | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        | j        | j        d| _        d S )N)__iter____len____bool__	__index____repr____str__	__bytes____hash____length_hint__
__format____getnewargs____getnewargs_ex__)super__init___check_iter
_check_len_check_bool_check_index_check_repr
_check_str_check_bytes_check_hash_check_length_hint_check_format_check_getnewargs_check_getnewargs_ex_protocol_map)selfrD   	__class__s     r!   rT   zSpecialMethodsChecker.__init__   s{        ((*(*(#6,"4!%!:
 
 	    r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r   r   c                   |                                 sd S t          ||          }|r9|j        | j        v r+t	          |          s | j        |j                 ||           |j        t
          v r|                     |           d S d S N)	is_methodr"   namera   r   r
   "_check_unexpected_method_signaturerb   r   inferreds      r!   visit_functiondefz'SpecialMethodsChecker.visit_functiondef   s      ~~ 	F*466 	:	T//	: .d33	:
 *Dty)$9999	! 	:33D99999	: 	:rd   c                |   t           |j                 }|d S |j        j        s|j        j        sd S t	          |dg          r|j        j        }n|j        j        dd          }t          |          t          |j        j                  z
  }t          |j        j                  }||z   }d}t          |t                    r||v}d|d          d|d          }n3||z
  }|dk    rd}n%|dk     rd}n|dk    r||z
  dk    p|j        j         }|r-|dk    rdnd	}	| 	                    d
|j        |||	f|           d S d S )Nzbuiltins.staticmethod   Fzbetween r   z or Twaswerer*   )argsr   )
r   rh   rq   varargr   lendefaults
isinstancetupleadd_message)
rb   r   expected_paramsall_args	mandatoryoptionalcurrent_paramsemitrestverbs
             r!   ri   z8SpecialMethodsChecker._check_unexpected_method_signature   s   0; 	Fy~ 	di&6 	 F$!8 9:: 	*y~HHy~abb)HMMC	(:$;$;;	ty)**"X-ou-- 	H O3D V);UUQRASUUOO #Y.Dqy H H H%_2Fdi6FG 	*a/;55VD5i.$G      	 	rd   r   type_strboolc                    t          | t          j                  o%| j        |k    ot          | t          j                   S rf   )ru   r   Instancerh   r   Const)r   r   s     r!   _is_wrapped_typez&SpecialMethodsChecker._is_wrapped_type   s>     tU^,, 2	U"2tU[111	
rd   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )NintT)r$   r   ru   r   r   r    r   r   s    r!   _is_intzSpecialMethodsChecker._is_int   B     11$>> 	4$,,LDJ1L1LLrd   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )Nr   T)r$   r   ru   r   r   r    r   r   s    r!   _is_strzSpecialMethodsChecker._is_str  r   rd   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )Nr   T)r$   r   ru   r   r   r    r   r   s    r!   _is_boolzSpecialMethodsChecker._is_bool  B     11$?? 	4$,,MDJ1M1MMrd   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )NbytesT)r$   r   ru   r   r   r    r   r   s    r!   	_is_byteszSpecialMethodsChecker._is_bytes  B     11$@@ 	4$,,NDJ1N1NNrd   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )Nrv   T)r$   r   ru   r   r   r    rv   r   s    r!   	_is_tuplezSpecialMethodsChecker._is_tuple  r   rd   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )NdictT)r$   r   ru   r   r   r    r   r   s    r!   _is_dictzSpecialMethodsChecker._is_dict"  r   rd   c                   t          | t          j                  rdS t          | t          j                  rdS t          | t          j                  r2	 |                     t                     dS # t          j	        $ r Y nw xY wt          | t          j
                  rb|                                 }|rLt          |t          j
                  r2	 |                    t                     dS # t          j	        $ r Y nw xY wdS )NTF)ru   r   	Generatorr   ComprehensionScoper   
local_attrNEXT_METHODr   NotFoundErrorClassDef	metaclass)r   r   s     r!   _is_iteratorz"SpecialMethodsChecker._is_iterator)  s   dEO,, 	4dE455 	4dEN++ 	,,,t(   en-- 	((I Z	5>BB ((5554,   Dus$   A0 0BBC, ,C>=C>rk   c                b    |                      |          s|                     d|           d S d S )Nr&   r   )r   rw   rj   s      r!   rU   z!SpecialMethodsChecker._check_iterB  sE      ** 	A44@@@@@	A 	Ard   c                    |                      |          s|                     d|           d S t          |t          j                  r$|j        dk     r|                     d|           d S d S d S )Nr,   r   r   r   rw   ru   r   r   r    rj   s      r!   rV   z SpecialMethodsChecker._check_lenF  s    ||H%% 	C6TBBBBB%+.. 	C8>A3E 	C6TBBBBB	C 	C 	C 	Crd   c                b    |                      |          s|                     d|           d S d S )Nr-   r   )r   rw   rj   s      r!   rW   z!SpecialMethodsChecker._check_boolL  sC    }}X&& 	A44@@@@@	A 	Ard   c                b    |                      |          s|                     d|           d S d S )Nr.   r   r   rw   rj   s      r!   rX   z"SpecialMethodsChecker._check_indexP  sC    ||H%% 	B5DAAAAA	B 	Brd   c                b    |                      |          s|                     d|           d S d S )Nr/   r   r   rw   rj   s      r!   rY   z!SpecialMethodsChecker._check_reprT  C    ||H%% 	A44@@@@@	A 	Ard   c                b    |                      |          s|                     d|           d S d S )Nr0   r   r   rj   s      r!   rZ   z SpecialMethodsChecker._check_strX  sC    ||H%% 	@3$?????	@ 	@rd   c                b    |                      |          s|                     d|           d S d S )Nr1   r   )r   rw   rj   s      r!   r[   z"SpecialMethodsChecker._check_bytes\  sC    ~~h'' 	B5DAAAAA	B 	Brd   c                b    |                      |          s|                     d|           d S d S )Nr2   r   r   rj   s      r!   r\   z!SpecialMethodsChecker._check_hash`  r   rd   c                    |                      |          s|                     d|           d S t          |t          j                  r$|j        dk     r|                     d|           d S d S d S )Nr3   r   r   r   rj   s      r!   r]   z(SpecialMethodsChecker._check_length_hintd  s     ||H%% 	H;$GGGGG%+.. 	H8>A3E 	H;$GGGGG	H 	H 	H 	Hrd   c                b    |                      |          s|                     d|           d S d S )Nr4   r   r   rj   s      r!   r^   z#SpecialMethodsChecker._check_formatl  sC    ||H%% 	C6TBBBBB	C 	Crd   c                b    |                      |          s|                     d|           d S d S )Nr5   r   )r   rw   rj   s      r!   r_   z'SpecialMethodsChecker._check_getnewargsp  sE     ~~h'' 	G:FFFFF	G 	Grd   c                   |                      |          s|                     d|           d S t          |t          j                  sd S d}t          |j                  dk    rd}nv|j        d         | j         f|j        d         | j        ffD ]M\  }}t          |t          j                  rt          |          }|r|t          j        ur ||          sd} nN|r|                     d|           d S d S )Nr6   r   F   Tr   rn   )r   rw   ru   r   Tuplers   eltsr   Callr   r   Uninferable)rb   r   rk   found_errorargchecks         r!   r`   z*SpecialMethodsChecker._check_getnewargs_exv  s4    ~~h'' 	=DIIIF(EK00 	Fx}" 	KK q!4>2q!4=1 
 

U c5:.. *$S//C 3g&99  5:: &* 	J=DIIIII	J 	Jrd   )rD   r   r   rE   )r   r   r   rE   )r   r   r   r   r   r   )r   r   r   r   )r   r   rk   r   r   rE   )"__name__
__module____qualname____doc__rh   r   msgsrT   r   rl   visit_asyncfunctiondefri   staticmethodr   r   r   r   r   r   r   r   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   __classcell__)rc   s   @r!   r$   r$   8   s         D ,#=&1= = = <<
 E12 ;<=

















WQ QDf
 
 
 
 
 
&  -!  &!%( : : : :  /0 0 0 0d 
 
 
 \
 M M M \M M M M \M N N N \N O O O \O O O O \O N N N \N    \0A A A AC C C CA A A AB B B BA A A A@ @ @ @B B B BA A A AH H H HC C C CG G G GJ J J J J J J Jrd   r$   rf   )r   r   r   r   r   r   r   r   )r   
__future__r   collections.abcr   r   r   r   astroid.contextr   astroid.typingr   pylint.checkersr	   pylint.checkers.utilsr
   r   r   r   r   r   pylint.lint.pylinterr   r   r"   r$    rd   r!   <module>r      sW  
 < ; " " " " " " $ $ $ $ $ $                  , , , , , , * * * * * * ' ' ' ' ' '                * ) ) ) ) ) (,    4[J [J [J [J [JK [J [J [J [J [Jrd   