§
    ÷yIf;  ã                  óº   — 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)zÄSafely 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        úc/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/classes/special_methods_checker.pyÚ_safe_infer_call_resultr#      s¿   € ðØ×(Ò(¨¸Ð(ÑAÔAˆÝ�W‘”ˆˆøÝÔ!ð ð ð ØˆtˆtÝð ð ð ØˆtˆtðøøøðÝˆW‰ŒˆØˆtøÝÔ!ð ð ð ØˆtˆtÝð ð ð Øˆˆˆðøøø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-signaturezˆEmitted 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Ô˜tœyÔ)¨$°Ñ9Ô9Ð9àŒ9�	Ð!Ð!Ø×3Ò3°DÑ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Œ~ð 	 d¤iÔ&6ð 	ð ˆFå˜$Ð!8Ð 9Ñ:Ô:ð 	*à”y”~ˆHˆHà”y”~ a b bÔ)ˆHÝ˜‘M”M¥C¨¬	Ô(:Ñ$;Ô$;Ñ;ˆ	Ý�t”yÔ)Ñ*Ô*ˆØ" XÑ-ˆàˆÝ�o¥uÑ-Ô-ð 	Hð  OÐ3ˆDð V¨¸Ô);ÐUÐUÀÐQRÔASÐUÐUˆOˆOð # YÑ.ˆDØ�qŠyˆyØ��Ø˜’�Ø��Ø˜’�Ø%¨™_°Ò2ÐF°d´iÔ6FÐG�àð 	Ø*¨aÒ/Ð/�5�5°VˆDØ×ÒØ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>   € õ �t�Uœ^Ñ,Ô,ð 2Ø”	˜UÒ"ð2å˜t¥U¤[Ñ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µ¸D¼JÍÑ1LÔ1LÐ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µ¸D¼JÍÑ1MÔ1MÐ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µ¸D¼JÍÑ1NÔ1NÐ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 n€w 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  € å�d�EœOÑ,Ô,ð 	à�4Ý�d�EÔ4Ñ5Ô5ð 	à�4å�d�EœNÑ+Ô+ð 	ðØ—’¥Ñ,Ô,Ð,Ø�tøÝÔ(ð ð ð Ø�ðøøøå˜�eœnÑ-Ô-ð 	ØŸšÑ(Ô(ˆ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Ø×ÒÐ4¸4ÐÑ@Ô@Ð@Ð@Ð@ð	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Ø×ÒÐ6¸TÐÑBÔBÐBÐBÐBÝ˜¥%¤+Ñ.Ô.ð 	C°8´>ÀAÒ3EÐ3EØ×ÒÐ6¸TÐÑBÔBÐBÐBÐBð	Cð 	CÐ3EÐ3Ere   c                ób   — |                       |¦  «        s|                      d|¬¦  «         d S d S )Nr.   rŠ   )r�   rx   rk   s      r"   rX   z!SpecialMethodsChecker._check_boolL  sC   € Ø�}Š}˜XÑ&Ô&ð 	AØ×ÒÐ4¸4ÐÑ@Ô@Ð@Ð@Ð@ð	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Ø×ÒÐ5¸DÐÑ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Ø×ÒÐ4¸4ÐÑ@Ô@Ð@Ð@Ð@ð	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Ø×ÒÐ5¸DÐÑ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´>ÀAÒ3EÐ3EØ×ÒÐ;À$ÐÑGÔGÐGÐGÐGð	Hð 	HÐ3EÐ3Ere   c                ób   — |                       |¦  «        s|                      d|¬¦  «         d S d S )Nr5   rŠ   r«   rk   s      r"   r_   z#SpecialMethodsChecker._check_formatl  sC   € Ø�|Š|˜HÑ%Ô%ð 	CØ×ÒÐ6¸TÐÑ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å˜(¥E¤KÑ0Ô0ð 	àˆFàˆåˆxŒ}ÑÔ Ò"Ð"ØˆKˆKð ”˜qÔ! 4¤>Ð2Ø”˜qÔ! 4¤=Ð1ðð 
ð 
‘
��Uõ ˜c¥5¤:Ñ.Ô.ð *Ý$ 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€Dðf
ð 
ð 
ð 
ð 
ð 
ð&  ÐØ-ØØ!ØØ ØØØ ØØ&Ø!Ø%Ø(ñô ð:ð :ð :ñô ð:ð  /Ðð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   