§
    ñyIfÙ  ã                  óD  — d dl mZ d dl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mZmZ d dlmZ d dlmZmZ er$d dlmZ  ed	e¬
¦  «        Ze
eegef                  Zede	d         ed         edf         Zeee	e         eedf         edf         Z G d„ d¦  «        ZdS )é    )ÚannotationsN)Údefaultdict)ÚCallable)ÚTYPE_CHECKINGÚListÚOptionalÚTupleÚTypeVarÚUnionÚcastÚoverload)Ú_invalidate_cache)ÚSuccessfulInferenceResultÚTransformFn)ÚnodesÚ_SuccessfulInferenceResultT)Úboundúnodes.NodeNG)r   ..c                  óÊ   — e Zd ZdZd!d„Zd"d„Zd#d	„Zed$d
„¦   «         Zed%d„¦   «         Zed&d„¦   «         Zed'd„¦   «         Zed#d„¦   «         Zd(d„Z	 d)d*d„Z		 d)d*d„Z
d#d „ZdS )+ÚTransformVisitoraP  A visitor for handling transforms.

    The standard approach of using it is to call
    :meth:`~visit` with an *astroid* module and the class
    will take care of the rest, walking the tree and running the
    transforms for each encountered node.

    Based on its usage in AstroidManager.brain, it should not be reinstantiated.
    ÚreturnÚNonec                ó8   — t          t          ¦  «        | _        d S ©N)r   ÚlistÚ
transforms)Úselfs    úF/var/www/piapp/venv/lib/python3.11/site-packages/astroid/transforms.pyÚ__init__zTransformVisitor.__init__.   s   € õ �ÑÔð 	Œˆˆó    Únoder   c                ó¨   — |j         }| j        |         D ]<\  }}|� ||¦  «        r* ||¦  «        }|�t          ¦   «          |}|j         |k    r nŒ=|S )zdCall matching transforms for the given node if any and return the
        transformed node.
        )Ú	__class__r   r   )r   r!   ÚclsÚtransform_funcÚ	predicateÚrets         r   Ú
_transformzTransformVisitor._transform;   sx   € ð Œnˆà)-¬¸Ô)=ð 
	ð 
	Ñ%ˆN˜IØÐ  I I¨d¡O¤OÐ Ø$�n TÑ*Ô*�ð �?Ý%Ñ'Ô'Ð'Ø�DØ”= CÒ'Ð'à�EøØˆr    r   c                óâ   — |j         D ]S}t          ||¦  «        }t          t          |¦  «        }|                      |¦  «        }||k    rt          |||¦  «         ŒT|                      |¦  «        S r   )Ú_astroid_fieldsÚgetattrr   Ú
_VistablesÚ_visit_genericÚsetattrr(   )r   r!   ÚnameÚvalueÚvisiteds        r   Ú_visitzTransformVisitor._visitN   su   € ØÔ(ð 	-ð 	-ˆDÝ˜D $Ñ'Ô'ˆEÝ� UÑ+Ô+ˆEØ×)Ò)¨%Ñ0Ô0ˆGØ˜%ÒÐÝ˜˜d GÑ,Ô,Ð,øØ�Š˜tÑ$Ô$Ð$r    c                ó   — d S r   © ©r   r!   s     r   r-   zTransformVisitor._visit_genericW   s   € Ø25°#r    Ústrc                ó   — d S r   r4   r5   s     r   r-   zTransformVisitor._visit_genericZ   s   € Ø03°r    úlist[nodes.NodeNG]úlist[SuccessfulInferenceResult]c                ó   — d S r   r4   r5   s     r   r-   zTransformVisitor._visit_generic]   s	   € ð +.¨#r    útuple[nodes.NodeNG, ...]ú%tuple[SuccessfulInferenceResult, ...]c                ó   — d S r   r4   r5   s     r   r-   zTransformVisitor._visit_genericb   s	   € ð 14°r    c                ó   — d S r   r4   r5   s     r   r-   zTransformVisitor._visit_genericg   s   € ØORÈsr    r,   Ú_VisitReturnsc                ól  ‡ — t          |t          ¦  «        rˆ fd„|D ¦   «         S t          |t          ¦  «        rt          ˆ fd„|D ¦   «         ¦  «        S |rt          |t          ¦  «        r|S 	 ‰                      |¦  «        S # t
          $ r% t          j        d|› d�t          d¬¦  «         |cY S w xY w)Nc                ó:   •— g | ]}‰                      |¦  «        ‘ŒS r4   ©r-   ©Ú.0Úchildr   s     €r   ú
<listcomp>z3TransformVisitor._visit_generic.<locals>.<listcomp>l   s'   ø€ ÐAÐAÐA°5�D×'Ò'¨Ñ.Ô.ÐAÐAÐAr    c              3  óB   •K  — | ]}‰                      |¦  «        V — Œd S r   rB   rC   s     €r   ú	<genexpr>z2TransformVisitor._visit_generic.<locals>.<genexpr>n   s1   øè è € ÐFÐF¸˜×,Ò,¨UÑ3Ô3ÐFÐFÐFÐFÐFÐFr    z Astroid was unable to transform z¤.
Some functionality will be missing unless the system recursion limit is lifted.
From pylint, try: --init-hook='import sys; sys.setrecursionlimit(2000)' or higher.r   )Ú
stacklevel)	Ú
isinstancer   Útupler6   r2   ÚRecursionErrorÚwarningsÚwarnÚUserWarningr5   s   ` r   r-   zTransformVisitor._visit_genericj   sü   ø€ Ý�d�DÑ!Ô!ð 	BØAÐAÐAÐA¸DÐAÑAÔAÐAÝ�d�EÑ"Ô"ð 	GÝÐFÐFÐFÐFÀÐFÑFÔFÑFÔFÐFØð 	•z $­Ñ,Ô,ð 	ØˆKð	Ø—;’;˜tÑ$Ô$Ð$øÝð 		ð 		ð 		åŒMðe°4ð eð eð eõ Øðñ ô ð ð ˆKˆKˆKð		øøøs   Á/B Â,B3Â2B3NÚ
node_classú!type[_SuccessfulInferenceResultT]Ú	transformú(TransformFn[_SuccessfulInferenceResultT]r&   ú._Predicate[_SuccessfulInferenceResultT] | Nonec                óJ   — | j         |                              ||f¦  «         dS )aJ  Register `transform(node)` function to be applied on the given node.

        The transform will only be applied if `predicate` is None or returns true
        when called with the node as argument.

        The transform function may return a value which is then used to
        substitute the original node in the tree.
        N)r   Úappend©r   rP   rR   r&   s       r   Úregister_transformz#TransformVisitor.register_transform   s*   € ð 	Œ˜
Ô#×*Ò*¨I°yÐ+AÑBÔBÐBÐBÐBr    c                óJ   — | j         |                              ||f¦  «         dS )zUnregister the given transform.N)r   ÚremoverW   s       r   Úunregister_transformz%TransformVisitor.unregister_transform�   s*   € ð 	Œ˜
Ô#×*Ò*¨I°yÐ+AÑBÔBÐBÐBÐBr    c                ó,   — |                       |¦  «        S )z²Walk the given astroid *tree* and transform each encountered node.

        Only the nodes which have transforms registered will actually
        be replaced or changed.
        )r2   r5   s     r   ÚvisitzTransformVisitor.visit˜   s   € ð �{Š{˜4Ñ Ô Ð r    )r   r   )r!   r   r   r   )r!   r   r   r   )r!   r   r   r   )r!   r6   r   r6   )r!   r8   r   r9   )r!   r;   r   r<   )r!   r,   r   r?   r   )rP   rQ   rR   rS   r&   rT   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r(   r2   r   r-   rX   r[   r]   r4   r    r   r   r   #   sP  € € € € € ðð ðð ð ð ðð ð ð ð&%ð %ð %ð %ð Ø5Ð5Ð5ñ „XØ5àØ3Ð3Ð3ñ „XØ3àð.ð .ð .ñ „Xð.ð ð4ð 4ð 4ñ „Xð4ð ØRÐRÐRñ „XØRðð ð ð ð2 EIð	Cð Cð Cð Cð Cð( EIð	Cð Cð Cð Cð Cð!ð !ð !ð !ð !ð !r    r   )Ú
__future__r   rM   Úcollectionsr   Úcollections.abcr   Útypingr   r   r   r	   r
   r   r   r   Úastroid.contextr   Úastroid.typingr   r   Úastroidr   r   ÚboolÚ
_Predicater6   r,   r?   r   r4   r    r   ú<module>rk      sŽ  ðð
 #Ð "Ð "Ð "Ð "Ð "à €€€Ø #Ð #Ð #Ð #Ð #Ð #Ø $Ð $Ð $Ð $Ð $Ð $Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ Wà -Ð -Ð -Ð -Ð -Ð -Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ Aàð IØÐÐÐÐÐà") 'Ø%Ð-Fð#ñ #ô #Ðð ˜(Ð$?Ð#@À$Ð#FÔGÔH€JàØ�D˜Ô(¨%Ð0CÔ*DÀcÈ4ÐOô€
ð ØØÐ	"Ô#Ø	Ð
# SÐ
(Ô)ØØð	
ô€ð{!ð {!ð {!ð {!ð {!ñ {!ô {!ð {!ð {!ð {!r    