
    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)-)= 
	 
	%NI IIdOO $nT** ?%'''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0G%dG,,,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    ORsr    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A5D''..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    dD!! 	BAAAADAAAAdE"" 	GFFFFFFFFFF 	z$,, 	K	;;t$$$ 		 		 		Me4 e e e     KKK		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*     	
#**Iy+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*     	
#**Iy+ABBBBBr    c                ,    |                      |          S )zWalk 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HJD(%0C*Dc4O
 	"#	
#S
()	
{! {! {! {! {! {! {! {! {! {!r    