§
    öyIfF  ã                  ó”   — d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 erd dlmZ ddhZh d	£Z G d
„ dej        ¦  «        Zdd„ZdS )é    )Úannotations)ÚTYPE_CHECKING)Únodes)ÚcheckersÚ
interfaces)Úutils)ÚPyLinterÚappendÚremove>   ÚaddÚpopÚclearr   Údiscardc                  óÖ   — e Zd ZdZdZddddœZdZ ej        dd	d
¦  «        d#d„¦   «         Z	d$d„Z
d%d„Zed&d„¦   «         Zed'd„¦   «         Zed&d„¦   «         Zd(d„Zd(d„Zd(d„Zd)d!„Zd"S )*ÚModifiedIterationCheckerz�Checks for modified iterators in for loops iterations.

    Currently supports `for` loops for Sets, Dictionaries and Lists.
    Úmodified_iteration)zkIterated list '%s' is being modified inside for loop body, consider iterating through a copy of it instead.úmodified-iterating-listz­Emitted when items are added or removed to a list being iterated through. Doing so can result in unexpected behaviour, that is why it is preferred to use a copy of the list.)z`Iterated dict '%s' is being modified inside for loop body, iterate through a copy of it instead.úmodified-iterating-dictziEmitted when items are added or removed to a dict being iterated through. Doing so raises a RuntimeError.)z_Iterated set '%s' is being modified inside for loop body, iterate through a copy of it instead.úmodified-iterating-setzhEmitted when items are added or removed to a set being iterated through. Doing so raises a RuntimeError.)ÚW4701ÚE4702ÚE4703© r   r   r   Únodeú	nodes.ForÚreturnÚNonec                óT   — |j         }|j        D ]}|                      ||¦  «         Œd S ©N)ÚiterÚbodyÚ._modified_iterating_check_on_node_and_children)Úselfr   Úiter_objÚ	body_nodes       ú^/var/www/piapp/venv/lib/python3.11/site-packages/pylint/checkers/modified_iterating_checker.pyÚ	visit_forz"ModifiedIterationChecker.visit_for6   sC   € ð ”9ˆØœð 	Uð 	UˆIØ×?Ò?À	È8ÑTÔTÐTÐTð	Uð 	Uó    r%   únodes.NodeNGr$   c                óŒ   — |                       ||¦  «         |                     ¦   «         D ]}|                      ||¦  «         ŒdS )zFSee if node or any of its children raises modified iterating messages.N)Ú_modified_iterating_checkÚget_childrenr"   )r#   r%   r$   Úchilds       r&   r"   zGModifiedIterationChecker._modified_iterating_check_on_node_and_children>   s\   € ð 	×&Ò& y°(Ñ;Ô;Ð;Ø×+Ò+Ñ-Ô-ð 	Qð 	QˆEØ×?Ò?ÀÀxÑPÔPÐPÐPð	Qð 	Qr(   c                ó°  ‡ ‡— d }t          |t          j        ¦  «        rŒt          ˆˆ fd„|j        D ¦   «         ¦  «        rkt          j        ‰¦  «        }t          |t          j        ¦  «        rd}n«t          |t          j        ¦  «        rd}nŽt          |t          j	        ¦  «        rd}nqt          ‰t          j
        t          j        f¦  «        snJ‰                      |‰¦  «        rd}n1‰                      |‰¦  «        rd}n‰                      |‰¦  «        rd}|r8‰                      ||‰                     ¦   «         ft"          j        ¬¦  «         d S d S )Nc              3  óD   •K  — | ]}‰                      |‰¦  «        V — Œd S r   )Ú_deleted_iteration_target_cond)Ú.0Útr$   r#   s     €€r&   ú	<genexpr>zEModifiedIterationChecker._modified_iterating_check.<locals>.<genexpr>J   sD   øè è € ð 2
ð 2
ØABˆD×/Ò/°°8Ñ<Ô<ð2
ð 2
ð 2
ð 2
ð 2
ð 2
r(   r   r   r   )r   ÚargsÚ
confidence)Ú
isinstancer   ÚDeleteÚanyÚtargetsr   Ú
safe_inferÚListÚDictÚSetÚNameÚ	AttributeÚ_modified_iterating_list_condÚ_modified_iterating_dict_condÚ_modified_iterating_set_condÚadd_messageÚ	repr_namer   Ú	INFERENCE)r#   r   r$   Úmsg_idÚinferreds   ` `  r&   r+   z2ModifiedIterationChecker._modified_iterating_checkF   s�  øø€ ð ˆÝ�d�EœLÑ)Ô)ð 	.­cð 2
ð 2
ð 2
ð 2
ð 2
ØFJÄlð2
ñ 2
ô 2
ñ /
ô /
ð 	.õ Ô'¨Ñ1Ô1ˆHÝ˜(¥E¤JÑ/Ô/ð 2Ø2��Ý˜H¥e¤jÑ1Ô1ð 2Ø2��Ý˜H¥e¤iÑ0Ô0ð 2Ø1�øÝ˜H¥u¤zµ5´?Ð&CÑDÔDð 	.ØØ×/Ò/°°hÑ?Ô?ð 	.Ø.ˆFˆFØ×/Ò/°°hÑ?Ô?ð 	.Ø.ˆFˆFØ×.Ò.¨t°XÑ>Ô>ð 	.Ø-ˆFØð 	Ø×ÒØØØ×(Ò(Ñ*Ô*Ð,Ý%Ô/ð	 ñ ô ð ð ð ð	ð 	r(   Úboolc                ó  — t          | t          j        ¦  «        okt          | j        t          j        ¦  «        oLt          | j        j        t          j        ¦  «        o(t          | j        j        j        t          j        ¦  «        S r   )	r6   r   ÚExprÚvalueÚCallÚfuncr?   Úexprr>   ©r   s    r&   Ú'_is_node_expr_that_calls_attribute_namez@ModifiedIterationChecker._is_node_expr_that_calls_attribute_named   sc   € õ �t�UœZÑ(Ô(ð =Ý˜4œ:¥u¤zÑ2Ô2ð=å˜4œ:œ?­E¬OÑ<Ô<ð=õ ˜4œ:œ?Ô/µ´Ñ<Ô<ð		
r(   ú
nodes.Exprúnodes.Name | nodes.AttributeÚ	infer_valúnodes.List | nodes.Setc                ó¶   — t          |t          j        ¦  «        r|j        n|j        }|t          j        |¦  «        k    o| j        j        j	        j        |k    S r   )
r6   r   r?   ÚattrnameÚnamer   r:   rK   rM   rN   )r   r$   rS   Úiter_obj_names       r&   Ú_common_cond_list_setz.ModifiedIterationChecker._common_cond_list_setm   s[   € õ ˜(¥E¤OÑ4Ô4ðˆHÔÐà”ð 	ð
 �UÔ-¨hÑ7Ô7Ò7ð 
ØŒJŒOÔ Ô%¨Ò6ð	
r(   c                óÔ   — t          | t          j        ¦  «        oNt          | j        d         t          j        ¦  «        o)t          | j        d         j        t          j        ¦  «        S )Nr   )r6   r   ÚAssignr9   Ú	SubscriptrK   r>   rO   s    r&   Ú_is_node_assigns_subscript_namez8ModifiedIterationChecker._is_node_assigns_subscript_name|   sN   € å˜$¥¤Ñ-Ô-ð 
Ý�t”| A”­¬Ñ8Ô8ð @Ý˜DœL¨œOÔ1µ5´:Ñ>Ô>ð	
r(   c                ó  — |                       |¦  «        sdS t          j        |j        j        j        ¦  «        }t          |t          j        ¦  «        sdS |  	                    |||¦  «        o|j        j        j
        t          v S ©NF)rP   r   r:   rK   rM   rN   r6   r   r;   rY   rV   Ú_LIST_MODIFIER_METHODS©r#   r   r$   rS   s       r&   r@   z6ModifiedIterationChecker._modified_iterating_list_condƒ   s   € ð ×;Ò;¸DÑAÔAð 	Ø�5ÝÔ$ T¤Z¤_Ô%9Ñ:Ô:ˆ	Ý˜)¥U¤ZÑ0Ô0ð 	Ø�5à×&Ò& t¨X°yÑAÔAð CØ”
”Ô(Õ,BÐBð	
r(   c                óÔ  — |                       |¦  «        sdS t          |t          j        ¦  «        rš|j        |j        d         j        j        k    rzt          |j        j        t          j	        ¦  «        rVt          |j        d         j
        t          j        ¦  «        r,|j        j        j        |j        d         j
        j        k    rdS t          j        |j        d         j        ¦  «        }t          |t          j        ¦  «        sdS |t          j        |¦  «        k    rdS t          |t          j        ¦  «        r|j        }n|j        }|j        d         j        j        |k    S )NFr   )r]   r6   r   r>   rW   r9   rK   ÚparentÚtargetÚ
AssignNameÚslicer   r:   r<   r?   rV   )r#   r   r$   rS   rX   s        r&   rA   z6ModifiedIterationChecker._modified_iterating_dict_cond�   s4  € ð ×3Ò3°DÑ9Ô9ð 	Ø�5õ �x¥¤Ñ,Ô,ð	à” ¤¨a¤Ô!6Ô!;Ò;Ð;Ý˜8œ?Ô1µ5Ô3CÑDÔDð <å˜4œ<¨œ?Ô0µ%´*Ñ=Ô=ð <ð ”Ô&Ô+¨t¬|¸A¬Ô/DÔ/IÒIÐIà�5ÝÔ$ T¤\°!¤_Ô%:Ñ;Ô;ˆ	Ý˜)¥U¤ZÑ0Ô0ð 	Ø�5Ø�Ô(¨Ñ2Ô2Ò2Ð2Ø�5Ý�h¥¤Ñ0Ô0ð 	*Ø$Ô-ˆMˆMà$œMˆMØŒ|˜AŒÔ$Ô)¨]Ò:Ð:r(   c                ó  — |                       |¦  «        sdS t          j        |j        j        j        ¦  «        }t          |t          j        ¦  «        sdS |  	                    |||¦  «        o|j        j        j
        t          v S r_   )rP   r   r:   rK   rM   rN   r6   r   r=   rY   rV   Ú_SET_MODIFIER_METHODSra   s       r&   rB   z5ModifiedIterationChecker._modified_iterating_set_cond©   s   € ð ×;Ò;¸DÑAÔAð 	Ø�5ÝÔ$ T¤Z¤_Ô%9Ñ:Ô:ˆ	Ý˜)¥U¤YÑ/Ô/ð 	Ø�5à×&Ò& t¨X°yÑAÔAð BØ”
”Ô(Õ,AÐAð	
r(   únodes.DelNamec                óP  ‡— t          ‰t          j        ¦  «        sdS t          |j        t          j        ¦  «        sdS t          |j        j        t          j        t          j        f¦  «        sdS t          ˆfd„t          j
        |j        j        ¦  «        D ¦   «         ¦  «        S )NFc              3  ó.   •K  — | ]}|‰j         k    V — Œd S r   )rW   )r1   r2   r   s     €r&   r3   zJModifiedIterationChecker._deleted_iteration_target_cond.<locals>.<genexpr>Á   s=   øè è € ð 
ð 
àð �”ŠNð
ð 
ð 
ð 
ð 
ð 
r(   )r6   r   ÚDelNamerc   ÚForrd   re   ÚBaseContainerr8   r   Úfind_assigned_names_recursive)r#   r   r$   s    ` r&   r0   z7ModifiedIterationChecker._deleted_iteration_target_cond¶   s¯   ø€ õ ˜$¥¤Ñ.Ô.ð 	Ø�5Ý˜(œ/­5¬9Ñ5Ô5ð 	Ø�5ÝØŒOÔ"¥UÔ%5µuÔ7JÐ$Kñ
ô 
ð 	ð �5Ýð 
ð 
ð 
ð 
åÔ8¸¼Ô9OÑPÔPð
ñ 
ô 
ñ 
ô 
ð 	
r(   N)r   r   r   r   )r%   r)   r$   r)   r   r   )r   r)   r$   r)   r   r   )r   r)   r   rH   )r   rQ   r$   rR   rS   rT   r   rH   )r   r)   r$   rR   r   rH   )r   ri   r$   r)   r   rH   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rW   ÚmsgsÚoptionsr   Úonly_required_for_messagesr'   r"   r+   ÚstaticmethodrP   rY   r]   r@   rA   rB   r0   r   r(   r&   r   r      s`  € € € € € ðð ð
  €Dð
ð
ð
ðð €Dð, €Gà%€UÔ%Ø!Ð#<Ð>Vñô ðUð Uð Uñô ðUð
Qð Qð Qð Qðð ð ð ð< ð
ð 
ð 
ñ „\ð
ð ð
ð 
ð 
ñ „\ð
ð ð
ð 
ð 
ñ „\ð
ð
ð 
ð 
ð 
ð;ð ;ð ;ð ;ð2
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð 
ð 
r(   r   Úlinterr	   r   r   c                óJ   — |                       t          | ¦  «        ¦  «         d S r   )Úregister_checkerr   )rx   s    r&   Úregisterr{   Ç   s%   € Ø
×ÒÕ4°VÑ<Ô<Ñ=Ô=Ð=Ð=Ð=r(   N)rx   r	   r   r   )Ú
__future__r   Útypingr   Úastroidr   Úpylintr   r   Úpylint.checkersr   Úpylint.lintr	   r`   rh   ÚBaseCheckerr   r{   r   r(   r&   ú<module>rƒ      sî   ðð
 #Ð "Ð "Ð "Ð "Ð "à  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ð Ð à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø !Ð !Ð !Ð !Ð !Ð !àð %Ø$Ð$Ð$Ð$Ð$Ð$ð # HÐ-Ð ØDÐDÐDÐ ðn
ð n
ð n
ð n
ð n
˜xÔ3ñ n
ô n
ð n
ðb>ð >ð >ð >ð >ð >r(   