
    5 f;                        d Z ddlmZ ddlmZ ddlZddlmZ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util)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        e/var/www/equiseq/venv/lib/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)selfrE   	__class__s     r"   rU   zSpecialMethodsChecker.__init__   s{        ((*(*(#6,"4!%!:
 
 	    r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   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#   namerb   r   r   "_check_unexpected_method_signaturerc   r   inferreds      r"   visit_functiondefz'SpecialMethodsChecker.visit_functiondef   s      ~~ 	F*466 	:	T///-d33 0 *Dty)$9999	!!33D99999 "!re   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   ri   rr   varargr   lendefaults
isinstancetupleadd_message)
rc   r   expected_paramsall_args	mandatoryoptionalcurrent_paramsemitrestverbs
             r"   rj   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qyy%_2Fdi6FG 	*a//55VD5i.$G      	 	re   r	   type_strboolc                    t          | t          j                  o%| j        |k    ot          | t          j                   S rg   )rv   r   Instanceri   r   Const)r   r   s     r"   _is_wrapped_typez&SpecialMethodsChecker._is_wrapped_type   s>     tU^,, 2	U"2tU[111	
re   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )NintT)r%   r   rv   r   r   r!   r   r   s    r"   _is_intzSpecialMethodsChecker._is_int   B     11$>> 	4$,,LDJ1L1LLre   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )Nr   T)r%   r   rv   r   r   r!   r   r   s    r"   _is_strzSpecialMethodsChecker._is_str  r   re   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )Nr   T)r%   r   rv   r   r   r!   r   r   s    r"   _is_boolzSpecialMethodsChecker._is_bool  B     11$?? 	4$,,MDJ1M1MMre   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )NbytesT)r%   r   rv   r   r   r!   r   r   s    r"   	_is_byteszSpecialMethodsChecker._is_bytes  B     11$@@ 	4$,,NDJ1N1NNre   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )Nrw   T)r%   r   rv   r   r   r!   rw   r   s    r"   	_is_tuplezSpecialMethodsChecker._is_tuple  r   re   c                    t                               | d          rdS t          | t          j                  ot          | j        t                    S )NdictT)r%   r   rv   r   r   r!   r   r   s    r"   _is_dictzSpecialMethodsChecker._is_dict"  r   re   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)rv   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>rl   c                b    |                      |          s|                     d|           d S d S )Nr'   r   )r   rx   rk   s      r"   rV   z!SpecialMethodsChecker._check_iterB  sE      ** 	A44@@@@@	A 	Are   c                    |                      |          s|                     d|           d S t          |t          j                  r$|j        dk     r|                     d|           d S d S d S )Nr-   r   r   r   rx   rv   r   r   r!   rk   s      r"   rW   z SpecialMethodsChecker._check_lenF  s    ||H%% 	C6TBBBBB%+.. 	C8>A3E3E6TBBBBB	C 	C3E3Ere   c                b    |                      |          s|                     d|           d S d S )Nr.   r   )r   rx   rk   s      r"   rX   z!SpecialMethodsChecker._check_boolL  sC    }}X&& 	A44@@@@@	A 	Are   c                b    |                      |          s|                     d|           d S d S )Nr/   r   r   rx   rk   s      r"   rY   z"SpecialMethodsChecker._check_indexP  sC    ||H%% 	B5DAAAAA	B 	Bre   c                b    |                      |          s|                     d|           d S d S )Nr0   r   r   rx   rk   s      r"   rZ   z!SpecialMethodsChecker._check_reprT  C    ||H%% 	A44@@@@@	A 	Are   c                b    |                      |          s|                     d|           d S d S )Nr1   r   r   rk   s      r"   r[   z SpecialMethodsChecker._check_strX  sC    ||H%% 	@3$?????	@ 	@re   c                b    |                      |          s|                     d|           d S d S )Nr2   r   )r   rx   rk   s      r"   r\   z"SpecialMethodsChecker._check_bytes\  sC    ~~h'' 	B5DAAAAA	B 	Bre   c                b    |                      |          s|                     d|           d S d S )Nr3   r   r   rk   s      r"   r]   z!SpecialMethodsChecker._check_hash`  r   re   c                    |                      |          s|                     d|           d S t          |t          j                  r$|j        dk     r|                     d|           d S d S d S )Nr4   r   r   r   rk   s      r"   r^   z(SpecialMethodsChecker._check_length_hintd  s     ||H%% 	H;$GGGGG%+.. 	H8>A3E3E;$GGGGG	H 	H3E3Ere   c                b    |                      |          s|                     d|           d S d S )Nr5   r   r   rk   s      r"   r_   z#SpecialMethodsChecker._check_formatl  sC    ||H%% 	C6TBBBBB	C 	Cre   c                b    |                      |          s|                     d|           d S d S )Nr6   r   )r   rx   rk   s      r"   r`   z'SpecialMethodsChecker._check_getnewargsp  sE     ~~h'' 	G:FFFFF	G 	Gre   c                   |                      |          s|                     d|           d S t          |t          j                  sd S d}t          |j                  dk    rd}n|j        d         | j         f|j        d         | j        ffD ]Y\  }}t          |t          j                  rt          |          }|r)t          |t          j                  s ||          sd} nZ|r|                     d|           d S d S )Nr7   r   F   Tr   ro   )r   rx   rv   r   Tuplert   eltsr   Callr   r   UninferableBase)rc   r   rl   found_errorargchecks         r"   ra   z*SpecialMethodsChecker._check_getnewargs_exv  s7    ~~h'' 	=DIIIF(EK00 	Fx}""KK q!4>2q!4=1 
 

U c5:.. *$S//C z#t/CDD  5:: &* 	J=DIIIII	J 	Jre   )rE   r   r   rF   )r   r   r   rF   )r   r	   r   r   r   r   )r   r	   r   r   )r   r   rl   r	   r   rF   )"__name__
__module____qualname____doc__ri   r   msgsrU   r   rm   visit_asyncfunctiondefrj   staticmethodr   r   r   r   r   r   r   r   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   __classcell__)rd   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re   r%   rg   )r   r   r   r   r   r   r   r   )r   
__future__r   collections.abcr   r   r   r   r   astroid.contextr   astroid.typingr	   pylint.checkersr
   pylint.checkers.utilsr   r   r   r   r   r   pylint.lint.pylinterr   r   r#   r%    re   r"   <module>r      s]  
 < ; " " " " " " $ $ $ $ $ $  & & & & & & & & & & , , , , , , * * * * * * ' ' ' ' ' '                * ) ) ) ) ) (,    4[J [J [J [J [JK [J [J [J [J [Jre   